{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Super unsupervised scoring of texts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "from IPython.display import Image\n",
    "from IPython.core.display import HTML\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import spacy\n",
    "import fasttext\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "def distance_calculation(single_vector, x):    \n",
    "    try:\n",
    "        result = np.array(x.tolist())@single_vector.reshape(100,1) #change if needed for dimensions trained in model\n",
    "        result = result[0]\n",
    "    except:\n",
    "        result = np.nan\n",
    "    return(result)\n",
    "\n",
    "def vector_normalize(vector):\n",
    "    norm = np.linalg.norm(vector)\n",
    "    result = vector/norm\n",
    "    return(result)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Installation "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Depending on the needs of the researcher different libraries can be installed and used as necessary. In this demonstration we make use of these libraries to demonstrate the Super-Unsupervised (SU) approach:\n",
    "\n",
    "* The fasttext library to create unsupervised word embeddings (https://fasttext.cc/)\n",
    "* spaCy for tokenization (https://spacy.io/)\n",
    "* CADE for aligning word embeddings across time or subgroups (https://github.com/vinid/cade )\n",
    "\n",
    "The SU approach is fairly general and we could have used different libraries for each of these tasks, so this is simply an illustration of how one might go about doing an SU analysis. Specific installation instructions for each of these libraries can be found on the websites for each of them. \n",
    "\n",
    "Creating a virtual environment, or possibly several, perhaps one for each of the tasks, is advisable. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Toy example data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As our example of data we will be using data from the so-called Manifesto Project (https://manifesto-project.wzb.eu/) since this is a publicly available data source. We will be using the Danish version of the data. Once the data is downloaded you should have a data set that looks like the one below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>text</th>\n",
       "      <th>cmp_code</th>\n",
       "      <th>eu_code</th>\n",
       "      <th>manifesto_id</th>\n",
       "      <th>party</th>\n",
       "      <th>date</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Ny Alliance ønsker at gøre op med den blokpoli...</td>\n",
       "      <td>305</td>\n",
       "      <td>None</td>\n",
       "      <td>13001_200711</td>\n",
       "      <td>13001.0</td>\n",
       "      <td>200711.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Vi ønsker et opgør med Dansk Folkepartis domin...</td>\n",
       "      <td>305</td>\n",
       "      <td>None</td>\n",
       "      <td>13001_200711</td>\n",
       "      <td>13001.0</td>\n",
       "      <td>200711.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Vi ønsker i stedet et bredt samarbejde hen ove...</td>\n",
       "      <td>202</td>\n",
       "      <td>None</td>\n",
       "      <td>13001_200711</td>\n",
       "      <td>13001.0</td>\n",
       "      <td>200711.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>og vi vil udvikle den danske tradition for åbe...</td>\n",
       "      <td>202</td>\n",
       "      <td>None</td>\n",
       "      <td>13001_200711</td>\n",
       "      <td>13001.0</td>\n",
       "      <td>200711.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Vores politik er for alle danskere.</td>\n",
       "      <td>202</td>\n",
       "      <td>None</td>\n",
       "      <td>13001_200711</td>\n",
       "      <td>13001.0</td>\n",
       "      <td>200711.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19044</th>\n",
       "      <td>Et selvstændigt Danmark, økonomisk frihed og s...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>13952_197312</td>\n",
       "      <td>13952.0</td>\n",
       "      <td>197312.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19045</th>\n",
       "      <td>Valget den 9 januar er alene statsminister Har...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>13952_197501</td>\n",
       "      <td>13952.0</td>\n",
       "      <td>197501.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19046</th>\n",
       "      <td>X ved liste E  RETSFORBUNDET  Ændringer er nød...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>13952_197702</td>\n",
       "      <td>13952.0</td>\n",
       "      <td>197702.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19047</th>\n",
       "      <td>X ved liste  RETSFORBUNDET  Nu må der ske noge...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>13952_197910</td>\n",
       "      <td>13952.0</td>\n",
       "      <td>197910.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19048</th>\n",
       "      <td>DER MÅ EN NY POLITIK TIL   Retsforbundet vil f...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>13952_198401</td>\n",
       "      <td>13952.0</td>\n",
       "      <td>198401.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>19049 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                    text cmp_code eu_code  \\\n",
       "0      Ny Alliance ønsker at gøre op med den blokpoli...      305    None   \n",
       "1      Vi ønsker et opgør med Dansk Folkepartis domin...      305    None   \n",
       "2      Vi ønsker i stedet et bredt samarbejde hen ove...      202    None   \n",
       "3      og vi vil udvikle den danske tradition for åbe...      202    None   \n",
       "4                    Vores politik er for alle danskere.      202    None   \n",
       "...                                                  ...      ...     ...   \n",
       "19044  Et selvstændigt Danmark, økonomisk frihed og s...     None    None   \n",
       "19045  Valget den 9 januar er alene statsminister Har...     None    None   \n",
       "19046  X ved liste E  RETSFORBUNDET  Ændringer er nød...     None    None   \n",
       "19047  X ved liste  RETSFORBUNDET  Nu må der ske noge...     None    None   \n",
       "19048  DER MÅ EN NY POLITIK TIL   Retsforbundet vil f...     None    None   \n",
       "\n",
       "       manifesto_id    party      date  \n",
       "0      13001_200711  13001.0  200711.0  \n",
       "1      13001_200711  13001.0  200711.0  \n",
       "2      13001_200711  13001.0  200711.0  \n",
       "3      13001_200711  13001.0  200711.0  \n",
       "4      13001_200711  13001.0  200711.0  \n",
       "...             ...      ...       ...  \n",
       "19044  13952_197312  13952.0  197312.0  \n",
       "19045  13952_197501  13952.0  197501.0  \n",
       "19046  13952_197702  13952.0  197702.0  \n",
       "19047  13952_197910  13952.0  197910.0  \n",
       "19048  13952_198401  13952.0  198401.0  \n",
       "\n",
       "[19049 rows x 6 columns]"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mp_danish = pd.read_parquet(\"mp_danish2.parquet\")\n",
    "mp_danish"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# The general approach\n",
    "\n",
    "The general approach is outlined below. And we will start out with the \"basic approach\" first.\n",
    "\n",
    "![title](how_to_2.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Preprocess data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Based on using the SU on different datasets it is our impression that tokenization matters little if you have enough data, as also illustrated in the paper. Nonetheless if you have very little data, preprocessing can potentially reduce noise. Robustness tests of doing these preprocessing steps is of course advisable. Here will will use spaCy for preprocessing but plenty of other preprocessing tools of course exist."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Load a model that fits the Danish corpus.\n",
    "nlp = spacy.load(\"da_core_news_lg\")\n",
    "\n",
    "#By disabling the tagger, parser, and ner the processing is faster.\n",
    "docs = list(nlp.pipe(mp_danish[\"text\"], disable = [\"tagger\", \"parser\", \"ner\"]))\n",
    "\n",
    "#set up list to keep results\n",
    "tokens_list = []\n",
    "\n",
    "#iterate over documents and tokenize. More preprocessing can be added or removed\n",
    "for token in docs:    \n",
    "    result_temp = [w.lemma_.lower() for w in token #change to lowercase\n",
    "                                                                if w.is_stop !=True #remove stop words \n",
    "                                                                and w.is_punct != True #remove punctuation\n",
    "                                                                and w.like_url!=True  #remove urls\n",
    "                                                                and w.like_num!=True #remove numbers                                                                \n",
    "                                                                and w.is_space!=True #remove space                    \n",
    "                                                                ]\n",
    "    tokens_list.append(result_temp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['oktober', 'stemme', 'flertal']\n",
      "['politik', '-så', 'forstå']\n",
      "['vilje', 'resultater']\n"
     ]
    }
   ],
   "source": [
    "#example output after tokenization\n",
    "for example_text in tokens_list[0:3]:\n",
    "    print(example_text[0:3])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Train model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "#create textfile for fasttext\n",
    "file_to_write = open('text_for_ff.txt',\"w\", encoding = \"utf-8\")\n",
    "\n",
    "for text in tokens_list:\n",
    "    temp = \" \".join(text)\n",
    "    file_to_write.write(temp)\n",
    "    file_to_write.write(\"\\r\\n\")\n",
    "file_to_write.close()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "#train model using model defaults\n",
    "model = fasttext.train_unsupervised('text_for_ff.txt')\n",
    "model.save_model(\"example_model.bin\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Chosing construct(s)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(0.9277850389480591, 'militærvæsen'),\n",
       " (0.9080177545547485, 'totalitær'),\n",
       " (0.896812379360199, 'atomkrig'),\n",
       " (0.8947203159332275, 'zone'),\n",
       " (0.8936251401901245, 'nato'),\n",
       " (0.8928129076957703, 'militærudgift'),\n",
       " (0.8802181482315063, 'natos'),\n",
       " (0.8776800036430359, 'afruste'),\n",
       " (0.8763934373855591, 'atomvåben'),\n",
       " (0.8725166320800781, 'militærbudgettet'),\n",
       " (0.8724374771118164, 'atomvåbenfri'),\n",
       " (0.8714653253555298, 'ef'),\n",
       " (0.8687527775764465, 'militarisme'),\n",
       " (0.8682671189308167, 'neutral'),\n",
       " (0.8671748638153076, 'atomfri'),\n",
       " (0.862341046333313, 'neutralitet'),\n",
       " (0.8578084707260132, 'alliancefri'),\n",
       " (0.8555595278739929, 'nordvietnam'),\n",
       " (0.8555334806442261, 'atomraket'),\n",
       " (0.8493751287460327, 'sovjetunionen'),\n",
       " (0.8394702672958374, 'udenrigs'),\n",
       " (0.8385012745857239, 'romunionen'),\n",
       " (0.8377487063407898, 'usa'),\n",
       " (0.8334389925003052, 'verdensbanken'),\n",
       " (0.8329136967658997, 'øst'),\n",
       " (0.8327363729476929, 'oprustning'),\n",
       " (0.8306591510772705, 'norden'),\n",
       " (0.8295247554779053, 'udenrigs-'),\n",
       " (0.8277356624603271, 'fred'),\n",
       " (0.8274095058441162, 'udenrigshandel'),\n",
       " (0.8268830180168152, 'kernevåben'),\n",
       " (0.8259662389755249, 'mildne'),\n",
       " (0.8255969882011414, 'øst-'),\n",
       " (0.8249512910842896, 'storkrig'),\n",
       " (0.8234850168228149, 'nedrustning'),\n",
       " (0.8217493295669556, 'udruste'),\n",
       " (0.8213969469070435, 'afrustning'),\n",
       " (0.8180630803108215, \"usa's\"),\n",
       " (0.8167458176612854, 'sovjet'),\n",
       " (0.8145996928215027, 'warszawapagten')]"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#face validity test1 for the word \"military\"\n",
    "\n",
    "model.get_nearest_neighbors(\"militær\", k = 40)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(0.9843397736549377, 'uddannelses-'),\n",
       " (0.980664849281311, 'uddannelsen'),\n",
       " (0.9769441485404968, 'uddannelsessted'),\n",
       " (0.9751472473144531, 'uddannelserne'),\n",
       " (0.9738922715187073, 'uddannelsestiden'),\n",
       " (0.9714342951774597, 'efteruddannelse'),\n",
       " (0.9699759483337402, 'voksenuddannelse'),\n",
       " (0.9699330925941467, 'videreuddannelse'),\n",
       " (0.9698349833488464, 'uddannelsesforløb'),\n",
       " (0.9637749791145325, 'læreruddannelse'),\n",
       " (0.9634929895401001, 'uddannelsestilbud'),\n",
       " (0.9630306363105774, 'ungdomsuddannelse'),\n",
       " (0.9613595604896545, 'uddannelsesindsats'),\n",
       " (0.9608163833618164, 'uddannelsesplads'),\n",
       " (0.9601356983184814, 'grunduddannelse'),\n",
       " (0.9593237042427063, 'uddannelsesniveau'),\n",
       " (0.9559338688850403, 'uddannelsesfond'),\n",
       " (0.9558882713317871, 'uddannelsessystem'),\n",
       " (0.9534299373626709, 'uddannelsesområde'),\n",
       " (0.9518823027610779, 'uddannelsesorlov'),\n",
       " (0.9509714245796204, 'uddannelseskapaciteten'),\n",
       " (0.9505632519721985, 'uddannelsessystemet'),\n",
       " (0.9498379230499268, 'uddannelsessøgende'),\n",
       " (0.9495331645011902, 'ungdomsuddannelserne'),\n",
       " (0.9467149972915649, 'uddannelsessektor'),\n",
       " (0.9461625218391418, 'erhvervsuddannelse'),\n",
       " (0.9457888007164001, 'læreruddannelsen'),\n",
       " (0.9450814127922058, 'uddannelsesmæssige'),\n",
       " (0.9424175024032593, 'uddannelsesmuligheder'),\n",
       " (0.9413697123527527, 'dannelse'),\n",
       " (0.9405745267868042, 'uddannelsesstøtte'),\n",
       " (0.9360101222991943, 'uddannelsesstøtten'),\n",
       " (0.9308544397354126, 'voksenuddannelsesstøtte'),\n",
       " (0.9193733930587769, 'erhvervsuddannelser'),\n",
       " (0.9138838052749634, 'uddanne'),\n",
       " (0.8951426148414612, 'højtuddannet'),\n",
       " (0.8930765986442566, 'uddannelsesinstitution'),\n",
       " (0.8616652488708496, 'veluddannet'),\n",
       " (0.8409123420715332, 'uddannelsespolitik'),\n",
       " (0.8408920764923096, 'ungdoms-')]"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#face validity test1 for the word \"education\"\n",
    "\n",
    "model.get_nearest_neighbors(\"uddannelse\", k = 40)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Calculate distances"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First we calculate the mean vectors based on the tokens in each text and then we calculate the distances from the chosen constructs to our mean vectors in each text"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mean_vector</th>\n",
       "      <th>id</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>[0.0313758, -0.06726756, 0.122389, -0.08449308...</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>[0.02350507, -0.089615874, 0.018692, -0.035284...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>[-0.022382315, -0.05466907, 0.035981648, -0.07...</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>[0.043985765, -0.040796865, 0.10941875, -0.061...</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>[0.007553151, -0.051994473, 0.05955128, -0.123...</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19044</th>\n",
       "      <td>[0.015734026, -0.030615896, 0.044607606, -0.08...</td>\n",
       "      <td>19044</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19045</th>\n",
       "      <td>[0.0015908661, -0.056362182, 0.04291451, -0.10...</td>\n",
       "      <td>19045</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19046</th>\n",
       "      <td>[-0.009088553, -0.024836265, 0.039548226, -0.1...</td>\n",
       "      <td>19046</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19047</th>\n",
       "      <td>[0.013188484, -0.019876815, 0.04433661, -0.104...</td>\n",
       "      <td>19047</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19048</th>\n",
       "      <td>[0.0038666301, -0.021165235, 0.04427405, -0.10...</td>\n",
       "      <td>19048</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>19049 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                             mean_vector     id\n",
       "0      [0.0313758, -0.06726756, 0.122389, -0.08449308...      0\n",
       "1      [0.02350507, -0.089615874, 0.018692, -0.035284...      1\n",
       "2      [-0.022382315, -0.05466907, 0.035981648, -0.07...      2\n",
       "3      [0.043985765, -0.040796865, 0.10941875, -0.061...      3\n",
       "4      [0.007553151, -0.051994473, 0.05955128, -0.123...      4\n",
       "...                                                  ...    ...\n",
       "19044  [0.015734026, -0.030615896, 0.044607606, -0.08...  19044\n",
       "19045  [0.0015908661, -0.056362182, 0.04291451, -0.10...  19045\n",
       "19046  [-0.009088553, -0.024836265, 0.039548226, -0.1...  19046\n",
       "19047  [0.013188484, -0.019876815, 0.04433661, -0.104...  19047\n",
       "19048  [0.0038666301, -0.021165235, 0.04427405, -0.10...  19048\n",
       "\n",
       "[19049 rows x 2 columns]"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#########################\n",
    "###create mean vectors###\n",
    "#########################\n",
    "\n",
    "#set of list to save results\n",
    "results_all = []\n",
    "index_all = []\n",
    "\n",
    "#iterate over tokens\n",
    "for index,tweet in enumerate(tokens_list):\n",
    "    \n",
    "    try:\n",
    "        #get vector representations for each token and create an average\n",
    "        temp_vector = [model[x] for x in tweet if x in model.words]\n",
    "\n",
    "        if len(temp_vector)>0:\n",
    "            mean_vector = np.mean(temp_vector, axis = 0)\n",
    "            result = vector_normalize(mean_vector)\n",
    "            results_all.append(result)\n",
    "            index_all.append(index)\n",
    "        else:\n",
    "            results_all.append(np.nan)\n",
    "            index_all.append(index)\n",
    "    except:\n",
    "        results_all.append(np.nan)\n",
    "        index_all.append(index)\n",
    "\n",
    "#combine into dataframe\n",
    "df_mean = pd.DataFrame({\"mean_vector\":results_all, \"id\":index_all})   \n",
    "df_mean"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mean_vector</th>\n",
       "      <th>id</th>\n",
       "      <th>text</th>\n",
       "      <th>cmp_code</th>\n",
       "      <th>eu_code</th>\n",
       "      <th>manifesto_id</th>\n",
       "      <th>party</th>\n",
       "      <th>date</th>\n",
       "      <th>tokens</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>[0.0313758, -0.06726756, 0.122389, -0.08449308...</td>\n",
       "      <td>0</td>\n",
       "      <td>Ny Alliance ønsker at gøre op med den blokpoli...</td>\n",
       "      <td>305</td>\n",
       "      <td>None</td>\n",
       "      <td>13001_200711</td>\n",
       "      <td>13001.0</td>\n",
       "      <td>200711.0</td>\n",
       "      <td>[alliance, ønske, blokpolitik, præge, danmark]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>[0.02350507, -0.089615874, 0.018692, -0.035284...</td>\n",
       "      <td>1</td>\n",
       "      <td>Vi ønsker et opgør med Dansk Folkepartis domin...</td>\n",
       "      <td>305</td>\n",
       "      <td>None</td>\n",
       "      <td>13001_200711</td>\n",
       "      <td>13001.0</td>\n",
       "      <td>200711.0</td>\n",
       "      <td>[ønske, opgør, dansk, folkepartis, dominere, r...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>[-0.022382315, -0.05466907, 0.035981648, -0.07...</td>\n",
       "      <td>2</td>\n",
       "      <td>Vi ønsker i stedet et bredt samarbejde hen ove...</td>\n",
       "      <td>202</td>\n",
       "      <td>None</td>\n",
       "      <td>13001_200711</td>\n",
       "      <td>13001.0</td>\n",
       "      <td>200711.0</td>\n",
       "      <td>[ønske, sted, brede, samarbejde, midte]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>[0.043985765, -0.040796865, 0.10941875, -0.061...</td>\n",
       "      <td>3</td>\n",
       "      <td>og vi vil udvikle den danske tradition for åbe...</td>\n",
       "      <td>202</td>\n",
       "      <td>None</td>\n",
       "      <td>13001_200711</td>\n",
       "      <td>13001.0</td>\n",
       "      <td>200711.0</td>\n",
       "      <td>[udvikle, dansk, tradition, åbenhed, mangfoldi...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>[0.007553151, -0.051994473, 0.05955128, -0.123...</td>\n",
       "      <td>4</td>\n",
       "      <td>Vores politik er for alle danskere.</td>\n",
       "      <td>202</td>\n",
       "      <td>None</td>\n",
       "      <td>13001_200711</td>\n",
       "      <td>13001.0</td>\n",
       "      <td>200711.0</td>\n",
       "      <td>[politik, dansker]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19044</th>\n",
       "      <td>[0.015734026, -0.030615896, 0.044607606, -0.08...</td>\n",
       "      <td>19044</td>\n",
       "      <td>Et selvstændigt Danmark, økonomisk frihed og s...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>13952_197312</td>\n",
       "      <td>13952.0</td>\n",
       "      <td>197312.0</td>\n",
       "      <td>[selvstændig, danmark, økonomisk, frihed, soci...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19045</th>\n",
       "      <td>[0.0015908661, -0.056362182, 0.04291451, -0.10...</td>\n",
       "      <td>19045</td>\n",
       "      <td>Valget den 9 januar er alene statsminister Har...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>13952_197501</td>\n",
       "      <td>13952.0</td>\n",
       "      <td>197501.0</td>\n",
       "      <td>[valget, januar, statsminister, hartlings, bes...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19046</th>\n",
       "      <td>[-0.009088553, -0.024836265, 0.039548226, -0.1...</td>\n",
       "      <td>19046</td>\n",
       "      <td>X ved liste E  RETSFORBUNDET  Ændringer er nød...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>13952_197702</td>\n",
       "      <td>13952.0</td>\n",
       "      <td>197702.0</td>\n",
       "      <td>[x, liste, e, retsforbundet, ændringer, nødven...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19047</th>\n",
       "      <td>[0.013188484, -0.019876815, 0.04433661, -0.104...</td>\n",
       "      <td>19047</td>\n",
       "      <td>X ved liste  RETSFORBUNDET  Nu må der ske noge...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>13952_197910</td>\n",
       "      <td>13952.0</td>\n",
       "      <td>197910.0</td>\n",
       "      <td>[x, liste, retsforbundet, ske, fejlslagen, pol...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19048</th>\n",
       "      <td>[0.0038666301, -0.021165235, 0.04427405, -0.10...</td>\n",
       "      <td>19048</td>\n",
       "      <td>DER MÅ EN NY POLITIK TIL   Retsforbundet vil f...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>13952_198401</td>\n",
       "      <td>13952.0</td>\n",
       "      <td>198401.0</td>\n",
       "      <td>[politik, retsforbundet, føre, politik, forene...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>19049 rows × 9 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                             mean_vector     id  \\\n",
       "0      [0.0313758, -0.06726756, 0.122389, -0.08449308...      0   \n",
       "1      [0.02350507, -0.089615874, 0.018692, -0.035284...      1   \n",
       "2      [-0.022382315, -0.05466907, 0.035981648, -0.07...      2   \n",
       "3      [0.043985765, -0.040796865, 0.10941875, -0.061...      3   \n",
       "4      [0.007553151, -0.051994473, 0.05955128, -0.123...      4   \n",
       "...                                                  ...    ...   \n",
       "19044  [0.015734026, -0.030615896, 0.044607606, -0.08...  19044   \n",
       "19045  [0.0015908661, -0.056362182, 0.04291451, -0.10...  19045   \n",
       "19046  [-0.009088553, -0.024836265, 0.039548226, -0.1...  19046   \n",
       "19047  [0.013188484, -0.019876815, 0.04433661, -0.104...  19047   \n",
       "19048  [0.0038666301, -0.021165235, 0.04427405, -0.10...  19048   \n",
       "\n",
       "                                                    text cmp_code eu_code  \\\n",
       "0      Ny Alliance ønsker at gøre op med den blokpoli...      305    None   \n",
       "1      Vi ønsker et opgør med Dansk Folkepartis domin...      305    None   \n",
       "2      Vi ønsker i stedet et bredt samarbejde hen ove...      202    None   \n",
       "3      og vi vil udvikle den danske tradition for åbe...      202    None   \n",
       "4                    Vores politik er for alle danskere.      202    None   \n",
       "...                                                  ...      ...     ...   \n",
       "19044  Et selvstændigt Danmark, økonomisk frihed og s...     None    None   \n",
       "19045  Valget den 9 januar er alene statsminister Har...     None    None   \n",
       "19046  X ved liste E  RETSFORBUNDET  Ændringer er nød...     None    None   \n",
       "19047  X ved liste  RETSFORBUNDET  Nu må der ske noge...     None    None   \n",
       "19048  DER MÅ EN NY POLITIK TIL   Retsforbundet vil f...     None    None   \n",
       "\n",
       "       manifesto_id    party      date  \\\n",
       "0      13001_200711  13001.0  200711.0   \n",
       "1      13001_200711  13001.0  200711.0   \n",
       "2      13001_200711  13001.0  200711.0   \n",
       "3      13001_200711  13001.0  200711.0   \n",
       "4      13001_200711  13001.0  200711.0   \n",
       "...             ...      ...       ...   \n",
       "19044  13952_197312  13952.0  197312.0   \n",
       "19045  13952_197501  13952.0  197501.0   \n",
       "19046  13952_197702  13952.0  197702.0   \n",
       "19047  13952_197910  13952.0  197910.0   \n",
       "19048  13952_198401  13952.0  198401.0   \n",
       "\n",
       "                                                  tokens  \n",
       "0         [alliance, ønske, blokpolitik, præge, danmark]  \n",
       "1      [ønske, opgør, dansk, folkepartis, dominere, r...  \n",
       "2                [ønske, sted, brede, samarbejde, midte]  \n",
       "3      [udvikle, dansk, tradition, åbenhed, mangfoldi...  \n",
       "4                                     [politik, dansker]  \n",
       "...                                                  ...  \n",
       "19044  [selvstændig, danmark, økonomisk, frihed, soci...  \n",
       "19045  [valget, januar, statsminister, hartlings, bes...  \n",
       "19046  [x, liste, e, retsforbundet, ændringer, nødven...  \n",
       "19047  [x, liste, retsforbundet, ske, fejlslagen, pol...  \n",
       "19048  [politik, retsforbundet, føre, politik, forene...  \n",
       "\n",
       "[19049 rows x 9 columns]"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#add tokens to dataframe since we also want to investigate the full text later on when sorting\n",
    "mp_danish[\"id\"] = mp_danish.index\n",
    "df_mean = df_mean.merge(mp_danish, on = \"id\")\n",
    "df_mean[\"tokens\"] = tokens_list\n",
    "df_mean"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/roph/anaconda3/envs/dask2/lib/python3.6/site-packages/ipykernel_launcher.py:17: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "/home/roph/anaconda3/envs/dask2/lib/python3.6/site-packages/ipykernel_launcher.py:18: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mean_vector</th>\n",
       "      <th>id</th>\n",
       "      <th>text</th>\n",
       "      <th>cmp_code</th>\n",
       "      <th>eu_code</th>\n",
       "      <th>manifesto_id</th>\n",
       "      <th>party</th>\n",
       "      <th>date</th>\n",
       "      <th>tokens</th>\n",
       "      <th>distance_military</th>\n",
       "      <th>distance_education</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>[0.0313758, -0.06726756, 0.122389, -0.08449308...</td>\n",
       "      <td>0</td>\n",
       "      <td>Ny Alliance ønsker at gøre op med den blokpoli...</td>\n",
       "      <td>305</td>\n",
       "      <td>None</td>\n",
       "      <td>13001_200711</td>\n",
       "      <td>13001.0</td>\n",
       "      <td>200711.0</td>\n",
       "      <td>[alliance, ønske, blokpolitik, præge, danmark]</td>\n",
       "      <td>0.662339</td>\n",
       "      <td>0.321169</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>[0.02350507, -0.089615874, 0.018692, -0.035284...</td>\n",
       "      <td>1</td>\n",
       "      <td>Vi ønsker et opgør med Dansk Folkepartis domin...</td>\n",
       "      <td>305</td>\n",
       "      <td>None</td>\n",
       "      <td>13001_200711</td>\n",
       "      <td>13001.0</td>\n",
       "      <td>200711.0</td>\n",
       "      <td>[ønske, opgør, dansk, folkepartis, dominere, r...</td>\n",
       "      <td>0.561217</td>\n",
       "      <td>0.305069</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>[-0.022382315, -0.05466907, 0.035981648, -0.07...</td>\n",
       "      <td>2</td>\n",
       "      <td>Vi ønsker i stedet et bredt samarbejde hen ove...</td>\n",
       "      <td>202</td>\n",
       "      <td>None</td>\n",
       "      <td>13001_200711</td>\n",
       "      <td>13001.0</td>\n",
       "      <td>200711.0</td>\n",
       "      <td>[ønske, sted, brede, samarbejde, midte]</td>\n",
       "      <td>0.550391</td>\n",
       "      <td>0.302003</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>[0.043985765, -0.040796865, 0.10941875, -0.061...</td>\n",
       "      <td>3</td>\n",
       "      <td>og vi vil udvikle den danske tradition for åbe...</td>\n",
       "      <td>202</td>\n",
       "      <td>None</td>\n",
       "      <td>13001_200711</td>\n",
       "      <td>13001.0</td>\n",
       "      <td>200711.0</td>\n",
       "      <td>[udvikle, dansk, tradition, åbenhed, mangfoldi...</td>\n",
       "      <td>0.481232</td>\n",
       "      <td>0.381910</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>[0.007553151, -0.051994473, 0.05955128, -0.123...</td>\n",
       "      <td>4</td>\n",
       "      <td>Vores politik er for alle danskere.</td>\n",
       "      <td>202</td>\n",
       "      <td>None</td>\n",
       "      <td>13001_200711</td>\n",
       "      <td>13001.0</td>\n",
       "      <td>200711.0</td>\n",
       "      <td>[politik, dansker]</td>\n",
       "      <td>0.441559</td>\n",
       "      <td>0.297101</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19044</th>\n",
       "      <td>[0.015734026, -0.030615896, 0.044607606, -0.08...</td>\n",
       "      <td>19044</td>\n",
       "      <td>Et selvstændigt Danmark, økonomisk frihed og s...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>13952_197312</td>\n",
       "      <td>13952.0</td>\n",
       "      <td>197312.0</td>\n",
       "      <td>[selvstændig, danmark, økonomisk, frihed, soci...</td>\n",
       "      <td>0.619829</td>\n",
       "      <td>0.413156</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19045</th>\n",
       "      <td>[0.0015908661, -0.056362182, 0.04291451, -0.10...</td>\n",
       "      <td>19045</td>\n",
       "      <td>Valget den 9 januar er alene statsminister Har...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>13952_197501</td>\n",
       "      <td>13952.0</td>\n",
       "      <td>197501.0</td>\n",
       "      <td>[valget, januar, statsminister, hartlings, bes...</td>\n",
       "      <td>0.597748</td>\n",
       "      <td>0.400108</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19046</th>\n",
       "      <td>[-0.009088553, -0.024836265, 0.039548226, -0.1...</td>\n",
       "      <td>19046</td>\n",
       "      <td>X ved liste E  RETSFORBUNDET  Ændringer er nød...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>13952_197702</td>\n",
       "      <td>13952.0</td>\n",
       "      <td>197702.0</td>\n",
       "      <td>[x, liste, e, retsforbundet, ændringer, nødven...</td>\n",
       "      <td>0.585495</td>\n",
       "      <td>0.434929</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19047</th>\n",
       "      <td>[0.013188484, -0.019876815, 0.04433661, -0.104...</td>\n",
       "      <td>19047</td>\n",
       "      <td>X ved liste  RETSFORBUNDET  Nu må der ske noge...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>13952_197910</td>\n",
       "      <td>13952.0</td>\n",
       "      <td>197910.0</td>\n",
       "      <td>[x, liste, retsforbundet, ske, fejlslagen, pol...</td>\n",
       "      <td>0.566433</td>\n",
       "      <td>0.434405</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19048</th>\n",
       "      <td>[0.0038666301, -0.021165235, 0.04427405, -0.10...</td>\n",
       "      <td>19048</td>\n",
       "      <td>DER MÅ EN NY POLITIK TIL   Retsforbundet vil f...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>13952_198401</td>\n",
       "      <td>13952.0</td>\n",
       "      <td>198401.0</td>\n",
       "      <td>[politik, retsforbundet, føre, politik, forene...</td>\n",
       "      <td>0.575091</td>\n",
       "      <td>0.486721</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>18653 rows × 11 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                             mean_vector     id  \\\n",
       "0      [0.0313758, -0.06726756, 0.122389, -0.08449308...      0   \n",
       "1      [0.02350507, -0.089615874, 0.018692, -0.035284...      1   \n",
       "2      [-0.022382315, -0.05466907, 0.035981648, -0.07...      2   \n",
       "3      [0.043985765, -0.040796865, 0.10941875, -0.061...      3   \n",
       "4      [0.007553151, -0.051994473, 0.05955128, -0.123...      4   \n",
       "...                                                  ...    ...   \n",
       "19044  [0.015734026, -0.030615896, 0.044607606, -0.08...  19044   \n",
       "19045  [0.0015908661, -0.056362182, 0.04291451, -0.10...  19045   \n",
       "19046  [-0.009088553, -0.024836265, 0.039548226, -0.1...  19046   \n",
       "19047  [0.013188484, -0.019876815, 0.04433661, -0.104...  19047   \n",
       "19048  [0.0038666301, -0.021165235, 0.04427405, -0.10...  19048   \n",
       "\n",
       "                                                    text cmp_code eu_code  \\\n",
       "0      Ny Alliance ønsker at gøre op med den blokpoli...      305    None   \n",
       "1      Vi ønsker et opgør med Dansk Folkepartis domin...      305    None   \n",
       "2      Vi ønsker i stedet et bredt samarbejde hen ove...      202    None   \n",
       "3      og vi vil udvikle den danske tradition for åbe...      202    None   \n",
       "4                    Vores politik er for alle danskere.      202    None   \n",
       "...                                                  ...      ...     ...   \n",
       "19044  Et selvstændigt Danmark, økonomisk frihed og s...     None    None   \n",
       "19045  Valget den 9 januar er alene statsminister Har...     None    None   \n",
       "19046  X ved liste E  RETSFORBUNDET  Ændringer er nød...     None    None   \n",
       "19047  X ved liste  RETSFORBUNDET  Nu må der ske noge...     None    None   \n",
       "19048  DER MÅ EN NY POLITIK TIL   Retsforbundet vil f...     None    None   \n",
       "\n",
       "       manifesto_id    party      date  \\\n",
       "0      13001_200711  13001.0  200711.0   \n",
       "1      13001_200711  13001.0  200711.0   \n",
       "2      13001_200711  13001.0  200711.0   \n",
       "3      13001_200711  13001.0  200711.0   \n",
       "4      13001_200711  13001.0  200711.0   \n",
       "...             ...      ...       ...   \n",
       "19044  13952_197312  13952.0  197312.0   \n",
       "19045  13952_197501  13952.0  197501.0   \n",
       "19046  13952_197702  13952.0  197702.0   \n",
       "19047  13952_197910  13952.0  197910.0   \n",
       "19048  13952_198401  13952.0  198401.0   \n",
       "\n",
       "                                                  tokens  distance_military  \\\n",
       "0         [alliance, ønske, blokpolitik, præge, danmark]           0.662339   \n",
       "1      [ønske, opgør, dansk, folkepartis, dominere, r...           0.561217   \n",
       "2                [ønske, sted, brede, samarbejde, midte]           0.550391   \n",
       "3      [udvikle, dansk, tradition, åbenhed, mangfoldi...           0.481232   \n",
       "4                                     [politik, dansker]           0.441559   \n",
       "...                                                  ...                ...   \n",
       "19044  [selvstændig, danmark, økonomisk, frihed, soci...           0.619829   \n",
       "19045  [valget, januar, statsminister, hartlings, bes...           0.597748   \n",
       "19046  [x, liste, e, retsforbundet, ændringer, nødven...           0.585495   \n",
       "19047  [x, liste, retsforbundet, ske, fejlslagen, pol...           0.566433   \n",
       "19048  [politik, retsforbundet, føre, politik, forene...           0.575091   \n",
       "\n",
       "       distance_education  \n",
       "0                0.321169  \n",
       "1                0.305069  \n",
       "2                0.302003  \n",
       "3                0.381910  \n",
       "4                0.297101  \n",
       "...                   ...  \n",
       "19044            0.413156  \n",
       "19045            0.400108  \n",
       "19046            0.434929  \n",
       "19047            0.434405  \n",
       "19048            0.486721  \n",
       "\n",
       "[18653 rows x 11 columns]"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#########################\n",
    "### calculate distances ###\n",
    "#########################\n",
    "\n",
    "\n",
    "#individual words\n",
    "military_facebook = vector_normalize(model[\"militær\"])\n",
    "education_facebook = vector_normalize(model[\"uddannelse\"]) \n",
    "\n",
    "#if we wanted to create a combined word vector we would simply do the following\n",
    "#combined = vector_normalize(model[\"word1\"]+model[\"word2\"])\n",
    "\n",
    "#remove empty\n",
    "df_mean_reduced = df_mean[~df_mean[\"mean_vector\"].isna()]\n",
    "\n",
    "#calculate distances\n",
    "df_mean_reduced[\"distance_military\"] = df_mean_reduced[\"mean_vector\"].apply(lambda x: distance_calculation(military_facebook, x))\n",
    "df_mean_reduced[\"distance_education\"] = df_mean_reduced[\"mean_vector\"].apply(lambda x: distance_calculation(education_facebook,x))\n",
    "df_mean_reduced"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Sort and check example texts that are scored"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "De unge skal have et reelt valg – ingen ungdomsuddannelse er bedre eller mere rigtig end andre. 0.7490567734127526 \n",
      "\n",
      "Konservative mener, at læreruddannelsen skal være en universitetsuddannelse, og vi vil skærpe adgangskravene. 0.7124797821632293 \n",
      "\n",
      "Vi vil i stedet hæve ambitionerne: investere i uddannelser, forskning og innovative miljøer, som kan tiltrække internationale talenter. 0.5933514616493383 \n",
      "\n",
      "Og indvandrere, som har siddet i årevis på kontanthjælp, skal i gang med arbejde eller uddannelse. 0.639792175701317 \n",
      "\n",
      "DET HAR VI GJORT: I 2011 var der for mange unge, som ikke fik en ungdomsuddannelse. 0.8715543018539451 \n",
      "\n",
      "Stop for kontanthjælp til 18-24-årige, hvis der er oplagte uddannelsestilbud til dem. 0.6624168206665568 \n",
      "\n",
      "Alle skal have indflydelse på undervisning, pædagogik og forskning. 0.6580542839329382 \n",
      "\n",
      "Gennem uddannelsessystemet er vi med til at give alle borgere de redskaber og muligheder, 0.6465715946273491 \n",
      "\n",
      "SF vil skabe en folkeskole, der giver børnene ideelle forhold for deres læring. 0.6106121225781536 \n",
      "\n",
      "men de skal også udvikle sociale og kreative evner. 0.6078870268113167 \n",
      "\n",
      "skal have ret til som voksen at modtage mimimum12 års uddannelse betalt af det offentlige 0.6699977381350692 \n",
      "\n",
      "Vi skal igen have verdens bedste folkeskole. 0.5644583216615802 \n",
      "\n",
      "Vi tror på at attraktive arbejdspladser indeholder attraktive løsninger som tilgodeser personalets hele liv, herunder muligheden for fleksible arbejdstider. 0.5695779327412396 \n",
      "\n",
      "Vi ved, at der er brug for at alle får mere uddannelse 0.8620851065777485 \n",
      "\n",
      "For det danske samfund i form af en kvalificeret arbejdsstyrke, der kan konkurrere på dygtighed i stedet for løn. 0.5636509638477608 \n",
      "\n",
      "–  og  ufaglærte  lønmodtagere skal  kunne  tage  en  rigtig  uddannelse  på  højeste  dagpenge. 0.7459075820439325 \n",
      "\n",
      "Folkeskolen skal igen være verdens førende skole. 0.6015333252730268 \n",
      "\n",
      "De danske universiteter skal være uafhængige, både i måden de tilrettelægger uddannelsernes faglige indhold på og i de konkrete forskningsprojekter. 0.7582823194554498 \n",
      "\n",
      "En af de mange aktive er Lise Rask, gymnasieelev og 18 år. 0.5696230339383047 \n",
      "\n",
      "Det går ud over eleverne - særligt de bogligt svage. 0.6265969872330934 \n",
      "\n",
      "■ Gøre det obligatorisk at lære dansk fra 3-årsalderen  0.5785783819417405 \n",
      "\n",
      "For børn og unge skal den demokratiske integration først og fremmest ske igennem folkeskolen og ungdomsuddannelserne. 0.7527692846450933 \n",
      "\n",
      "Det er uholdbart for vores ellers  HYPERLINK \"https://www.socialdemokratiet.dk/da/politik/velfaerd/\" \\o \"Velfærd\" stærke samfundsmodel, at så mange børn stadig ikke vokser op med de samme gode muligheder som andre. 0.6098652825655837 \n",
      "\n",
      "Hvis ikke vi sikrer en folkeskole, hvor alle lærer så meget, at de bagefter er i stand til at tage en faglig uddannelse, 0.7999226615711508 \n",
      "\n",
      "Uddannelse for alle 1.0000000729613387 \n",
      "\n",
      "De kommende år får dansk erhvervsliv brug for titusindvis flere faglærte. 0.5663849408330652 \n",
      "\n",
      "Det er for meget lotteri, hvilken skole, hvilken klasse og hvilke lærere børnene får. 0.6472982357057164 \n",
      "\n",
      "Enhedslisten vil prioritere mange flere midler til uddannelse og til efteruddannelse af underviserne. 0.8709093820994301 \n",
      "\n",
      "Mål  #  8: TO  LÆRERE  I  DANSK  OG  MATEMATIK  DE  FØRSTE  TRE  SKOLEÅR 0.608300073864185 \n",
      "\n",
      "• Har sikret økonomisk ligestilling mellem  handelsskolerne og gymnasierne 0.7137950948127864 \n",
      "\n",
      "SF vil skabe en folkeskole, hvor flere lærer mere. 0.6026676490554395 \n",
      "\n",
      "Skal det fortsat være erhvervsskoler, gymnasier og videregående uddannelser, der skal mærke sparekniven, fordi biler skal gøres billigere, og der ønskes mere paskontrol ved grænsen? 0.6962102052028221 \n",
      "\n",
      "Og så skal dannelse have en central plads i alle ungdomsuddannelser. 0.9186985968688631 \n",
      "\n",
      "Testene skal være et pædagogisk værktøj for læreren til at sikre faglige fremskridt for den enkelte elev ved at målrette undervisningen til den enkelte elevs særlige evner. 0.6794714049515405 \n",
      "\n",
      "Ja til adgangsprøver og stopprøver ved de videregående uddannelser. 0.8903834243227652 \n",
      "\n",
      "Derfor vil SF skabe en ambitiøs folkeskole, der sikrer vores børn en solid faglig ballast. 0.6678972412758672 \n",
      "\n",
      "en uddannelse. 1.0000000729613387 \n",
      "\n",
      "Uddannelse 1.0000000729613387 \n",
      "\n",
      "Børnenes Danmark – forny børnehaver og skoler 0.6032759339832587 \n",
      "\n",
      "Vi vil oprette flere studiepladser uden for de største byer og give alle danskere en uddannelseskonto til uddannelse hele livet, så flere har adgang til mere uddannelse. 0.755986941797769 \n",
      "\n",
      "Med fri og lige adgang til  HYPERLINK \"file:///M:\\\\group\\\\DPS\\\\DD\\\\Marpor\\\\Coding\\\\5%20Digitalisation\\\\1%20OCR%20Inbox\\\\Denmark\\\\2019\\\\13320_2019_website\\\\Asyl%20%20%20Socialdemokratiets%20asylpolitik%20-%20l%C3%A6s%20mere%20her.htm\" \\o \"Velfaerd og sundhed\" sundhed. 0.6210325788936472 \n",
      "\n",
      "F.eks. med nye muligheder for inddragelse af frivillige organisationer 0.5616062347414029 \n",
      "\n",
      "Ny viden og forskning i verdensklasse er afgørende for et samfund med vækst og velstand. 0.567653424944188 \n",
      "\n",
      "Frem til 2010 vil vi afsætte i alt 10 mia. kr.  til styrket forskning, udvikling, uddannelse og iværksætteri. 0.6443666661154969 \n",
      "\n",
      "Der skal f.eks. stilles stramme krav til sprog, uddannelse, beskæftigelse og et vist forudgående kendskab til Danmark. 0.6830057097726054 \n",
      "\n",
      "Et Danmark, hvor alle børn lærer det, de skal, i den skole der passer bedst til deres behov og de ønsker, deres forældre har til en god skole. 0.5779350676856942 \n",
      "\n",
      "Børn, unge og voksne skal have uddannelser, der er i international topklasse. 0.828285845488548 \n",
      "\n",
      "Vores unge skal udstyres med den nyeste og fremmeste viden. 0.6710672254949026 \n",
      "\n",
      "Det samme gælder de voksne. 0.6028694859584444 \n",
      "\n",
      "Alle ledige skal tidligere end nu have ret og pligt til et job eller 0.5670172280671628 \n",
      "\n",
      "Efteruddannelsen kan f.eks. udvikles i samarbejde mellem håndværksuddannelserne, design- og arkitektskolerne, DTU og IT-universitetet med det formål at opnå et nationalt uddannelses- og kompetenceløft for alle håndværksfag målrettet en bæredygtig omstilling af samfundet. 0.5776923233481288 \n",
      "\n",
      "Og herhjemme har ungdomsuddannelser i eksempelvis Viby og Nyborg også indført et forbud. 0.6423008799415636 \n",
      "\n",
      "– obligatoriske tests som værktøj for lærerne. 0.6417053238546333 \n",
      "\n",
      "Tre SF-krav til en bedre folkeskole: 0.6419955794775443 \n",
      "\n",
      "Ingen skal afbryde deres uddannelse, fordi det ikke er muligt at finde en læreplads; 0.7607203030159759 \n",
      "\n",
      "I dag bliver elever og lærere trukket igennem PISA-undersøgelser, obligatoriske nationale tests og dokumentationskrav, som ikke hjælper eleverne til at lære mere. 0.6105674090504716 \n",
      "\n",
      "Et eksempel på de hastigt stigende klassekvotienter er på gymnasieområdet, hvor 4.308 af årets nye elever nu starter i en klasse med 32 elever eller flere. 0.6333198905715871 \n",
      "\n",
      "• Mange voksne mennesker, der ikke fik en faglig uddannelse som unge, har fået mulighed for at blive voksenlærlinge. 0.810840642908633 \n",
      "\n",
      "Efterværn har mange ansigter. Udover en videreførsel af den støtte man modtog før det 18. år, kan den tage form af en særlig voksenstøtte for unge, der er trætte af den ”behandlerkultur”, man udsatte børn og unge har mødt i deres opvækst. 0.5970787768521724 \n",
      "\n",
      "De studerendes undervisningsmiljø skal være kendetegnet af en høj engagementskultur med personlig feedback, balance mellem teori og praksis, såvel mellem kundskaber og kreativitet, fokus på den enkeltes trivsel og tryghed, kunst og kultur som forudsætning for al læring samt dynamiske samspilsrelationer med det omgivende samfund. 0.579437815206008 \n",
      "\n",
      "uddannelse, 1.0000000729613387 \n",
      "\n",
      "• Styrke integrationen af børn med anden kulturel eller sproglig baggrund. 0.5780635224990596 \n",
      "\n",
      "Fremtidens arbejdsmarkedet betyder, at danskere skal uddanne sig hele tiden gennem hele livet. 0.5611886692304817 \n",
      "\n",
      "Skal hverdagen i skolerne fortsat præges af nedskæringer, 0.5610479085291867 \n",
      "\n",
      "En skole, hvor alle børn lærer de basale færdigheder. 0.6017599481445981 \n",
      "\n",
      "■ Give folkeskolen en saltvandsindsprøjtning ved at sørge for, at der kommer flere lærere, 0.6158597316368399 \n",
      "\n",
      "Et gymnasium, der fører dig videre. 0.6792401841642568 \n",
      "\n",
      "Socialdemokraterne og SF vil bygge videre på velfærdssamfundets styrker. 0.6071516532270698 \n",
      "\n",
      "Men vi har samtidig muligheden for at daginstitutionerne bliver det sted, der i kraft af meget høj kvalitet og god tid, 0.5651034879811617 \n",
      "\n",
      "Derfor skal de pågældende asylansøgere sammen med deres børn have mulighed for at bo, arbejde og uddanne sig uden for flygtningecentrene indtil en hjemsendelse er mulig. 0.6274434780584502 \n",
      "\n",
      "30% er kontanthjælpsmodtagere og 22% har en etnisk minoritetsbaggrund. 0.5758154225511141 \n",
      "\n",
      "Bl.a. ved at sikre, at HF stadig giver adgang til de videregående uddannelser, gøre matematik obligatorisk og forenkle studieretningerne. 0.7780103993779371 \n",
      "\n",
      "Alle uddannelsesinstitutioner skal formulere en ekstern netværksstrategi 0.7406438416511387 \n",
      "\n",
      "En anden udfordring er, at for mange boligområder oplever lav beskæftigelse, manglende uddannelse, høj kriminalitet og store sociale problemer blandt beboerne. 0.6448449754409391 \n",
      "\n",
      "Vi arbejder for:1 Mere faglighed på ungdomsuddannelser og i folkeskolen 0.7968324104194874 \n",
      "\n",
      "Flere voksne i daginstitutionerne 0.6055054992822896 \n",
      "\n",
      "Nu er langt flere indvandrere i uddannelse og arbejde, og 7 ud af 10 føler sig godt integrerede. 0.5913185554008927 \n",
      "\n",
      "- og ikke forhindres i f.eks.  at lære at læse, så snart de kommer i skole. 0.5661175899676582 \n",
      "\n",
      "Ungdom og uddannelse 0.9621071142697839 \n",
      "\n",
      "Attraktive arbejdspladser med ansvar og faglig udvikling 0.6679781294282845 \n",
      "\n",
      "Det er hovedformålet for stx, hhx og htx. 0.6256380516747906 \n",
      "\n",
      "Og så vil vi styrke de praktiserende læger, så de netop er rustet til at tage imod de nye opgaver. 0.5625518091102775 \n",
      "\n",
      "Danmark kommer i de kommende år til at mangle faglært arbejdskraft, og samtidig forsvinder en del af de ufaglærte jobs på grund af den teknologiske udvikling. 0.6058142971898128 \n",
      "\n",
      "Hvis vi skal bevare vores velfærd om 10 og 15 år skal vi satse på uddannelse, uddannelse og uddannelse. 0.9286564250729537 \n",
      "\n",
      "De mest forhærdede unge skal anbringes i de sikrede ungdomsinstitutioner. 0.6208171946201304 \n",
      "\n",
      "UDSATTE BØRN OG UNGE 0.593910628145303 \n",
      "\n",
      "Belønne dygtige lærere 0.6298408659992785 \n",
      "\n",
      "Reform af voksen- og efteruddannelserne med samling af ansvaret i undervisningsministeriet. /500 mia.kr. til efteruddannelse af kortuddannede. 0.8590951006329068 \n",
      "\n",
      "Vi vil starte et udviklingsarbejde for at sikre bedre kvalitet i pasningstilbuddene. 0.5863132544628478 \n",
      "\n",
      "Derfor ønsker vi at tilbyde livslang læring og attraktive rotationsstillinger, der fremmer fokus på medarbejdernes faglighed. 0.5875888208994628 \n",
      "\n",
      "Samtidig skal vi droppe unødig dokumentation, så de ansatte kan bruge deres tid på det, de er uddannet til. 0.6389281259472049 \n",
      "\n",
      "Usikkerheden kan blive tungen på vægtskålen, der får de unge til at fravælge erhvervsskolerne. 0.6601840769485865 \n",
      "\n",
      "Ungdomsuddannelserne  og  de videregående  uddannelser  skal  derfor  løftes  til  at  klare  opgaven. 0.8898882789594943 \n",
      "\n",
      "Det styrker ligestillingen. 0.6026742414359778 \n",
      "\n",
      "Uddannelserne skal være for alle.” 0.9751470487331215 \n",
      "\n",
      "engelsk i 7.  klasse, 0.6713262265293873 \n",
      "\n",
      "og det er vigtigt, at den kommer tydeligt til udtryk i kulturministeriets støtteordninger såvel som i de kunstneriske uddannelser. 0.7088799650667327 \n",
      "\n",
      "Vi mener, at lønnen skal fastsættes individuelt, så vi kan belønne de lærere, der gør en stor indsats for dine børn. 0.5961174587155866 \n",
      "\n",
      "Og også for dem vil Dannebrog hurtigere komme til at flage på halvt end for dem, der på fødegangen havde en mor med en uddannelse. 0.7158542343229014 \n",
      "\n",
      "Karakterer og eksamen sikrer, at de større klassers elever kun bruger krudt på de \"rigtige\" fag. 0.6393103297884519 \n",
      "\n",
      "For at sikre at de ufaglærte og faglærte lønmodtagere kan klare sig i den globale konkurrence. 0.5886196182507597 \n",
      "\n",
      "Pengene skal følge barnet, så konkurrence mellem skolerne kan hæve kvaliteten. 0.5594825744246895 \n",
      "\n",
      "Læs mere om vores opkvalificeringsreform 0.6431772619880711 \n",
      "\n",
      "Det skal også  kunne ses på arbejdsmarkedet,  hvor der skal være plads til  os alle. 0.585897217766628 \n",
      "\n",
      "Det kan være inden for demokrati, grøn omstilling, lighed og kvinders rettigheder, uddannelse, seksuel og reproduktiv sundhed. 0.6197436871959409 \n",
      "\n",
      "–  der  ruster  børnene  til  mere  uddannelse 0.853585548502029 \n",
      "\n",
      "Voksenuddannelse skal give større ansvar og mere spændende arbejdsopgaver. 0.6207424812731341 \n",
      "\n",
      "Vi vil styrke det faglige indhold af vore uddannelser. 0.8728861284191636 \n",
      "\n",
      "Socialdemokratiet vil skabe bedre  HYPERLINK \"https://www.socialdemokratiet.dk/da/politik/erhvervsuddannelser/\" \\o \"Erhvervsuddannelser\" erhvervsuddannelser og give de praktiske fag en central plads i  HYPERLINK \"https://www.socialdemokratiet.dk/da/politik/boern/\" \\o \"Boern\" folkeskolen. 0.7795865749029636 \n",
      "\n",
      "Folkeskolen 0.6263593019537506 \n",
      "\n",
      "1. Indfør røgfri skoletid for alle under 18 år 0.6456359804438718 \n",
      "\n",
      "• Alle skoler skal være tilknyttet internettet via bredbånd, der giver høj hastighed på nettet. 0.5864476851363727 \n",
      "\n",
      "For at mindske frafaldet vil vi forbedre uddannelsernes indhold og rammer. 0.7860648941051929 \n",
      "\n",
      "• Arbejde for en fornyelse af public service-forpligtelsen i licensbetalte medier, 0.5669576197534221 \n",
      "\n",
      "Alternativet ønsker et samfund, hvor uddannelse er for både hoved, hænder og hjerte. 0.6630335729114941 \n",
      "\n",
      "Afskaffelse af obligatoriske randzoner. 0.6000447486813564 \n",
      "\n",
      "Dannebrog skal på nummerpladerne 0.683884914040481 \n",
      "\n",
      "BØRN OCH UNGE 0.6391262633564865 \n",
      "\n",
      "Socialdemokratiet har sammen med SF og De Radikale foreslået 10 konkrete tiltag, der skal styrke de praktiske fag og den praktiske dannelse i folkeskolen. 0.7557481296603054 \n",
      "\n",
      "Vi skal styrke indsatsen for flere praktikpladser og give bedre adgang til skolepraktik. 0.7204686076782856 \n",
      "\n",
      "Så nu skal flere voksne i timerne ske på bekostning af undervisningstimer. 0.6093548943670932 \n",
      "\n",
      "samt underholdning og oplevelser, er områder, hvor der vil være masser af nye beskæftigelsesmuligheder. 0.5890423213485951 \n",
      "\n",
      "3 UDDANNELSE: ILSDSÆLE ELLER LYSESLUKKERE 1.0000000729613387 \n",
      "\n",
      "Også i yderområderne hvor det er vigtigt at have uddannelsesinstitutioner. 0.7556610519686089 \n",
      "\n",
      "De mellemlange uddannelser skal være arnested for en offentlig sektor, der sørger for mere velfærd for pengene. 0.6168630966371472 \n",
      "\n",
      "Liberal Alliance vil gøre folkeskolereformen frivillig for den enkelte skole. 0.585210397709284 \n",
      "\n",
      "Obligatorisk test i læsning i 2. , 4. , 6.  og 8.  klasse, 0.6229124343999928 \n",
      "\n",
      "Moderne stavnsbinding. 0.5844709963067847 \n",
      "\n",
      "- Ved indførelse af en nummerpladetype med Dannebrog,  med samme placering som EUflaget har, forsvinder favoriseringen af EU-nummerpladerne. 0.6456376558614351 \n",
      "\n",
      "Underviseren skal have gode betingelser for at differentiere undervisningen og mulighed for at bruge sine faglige, pædagogiske og didaktiske kompetencer til at udføre undervisningsforløb for den enkelte klasse, der gavner alle klassens elever. 0.676334547011014 \n",
      "\n",
      "Iværksætteri på skoleskemaet 0.5872344468095045 \n",
      "\n",
      "Gode for hold for børn og unge, der skal trives, udvikle og uddanne sig. 0.6957437548921467 \n",
      "\n",
      "Forskning og uddannelse 0.8883780978073781 \n",
      "\n",
      "Hermed ændrer også fordelingspolitikken karakter. 0.5635269815176307 \n",
      "\n",
      "Erhvervsuddannelser skal vises større respekt 0.6989929978214839 \n",
      "\n",
      "Fritid er en nødvendighed for en god opvækst. 0.5695592844263687 \n",
      "\n",
      "Mere undervisning i forebyggelse og flere opsøgende helbredstjek i skolerne, hvor forældre, elever, skolelæger og sundhedsplejersker inddrages. 0.6249828526491532 \n",
      "\n",
      "Taxametersystemet på universiteterne skal gentænkes: Der skal indføres et fagligt taxameter, så det ikke kun belønnes, at eleverne bliver færdige, men også hvor dygtige de er. 0.6905559777983026 \n",
      "\n",
      "• Udvikle en ny praktisk betonet pædagogik, 0.6805146131106898 \n",
      "\n",
      "Det kan vi afhjælpe via ret til 30 timers arbejdsuge og uddannelse med jobrotation. 0.7433714485665706 \n",
      "\n",
      "Der er ikke plads til skattelettelser, som der ikke er råd til. 0.5896167614635729 \n",
      "\n",
      "De komplementære metoder skal indgå i offentlige uddannelser 0.6846025224083204 \n",
      "\n",
      "Også dem i job skal have flere muligheder for at uddanne sig. 0.7999169739821267 \n",
      "\n",
      "Konservative vil skabe mere respekt omkring læreren som leder og underviser. 0.5947239465606732 \n",
      "\n",
      "Mere fleksible åbningstider i dagtilbud og i det offentlige. 0.5650313962184768 \n",
      "\n",
      "så de skoletrætte og unge med ringe boglig interesse også får en ungdomsuddannelse. 0.7864779516900966 \n",
      "\n",
      "Vi ønsker langt større investeringer i uddannelse, blandt andet færre elever i klasserne i folkeskolen og flere penge til inklusion. 0.7056696243477145 \n",
      "\n",
      "Eller med en tryg start i de første år og en skole, der har råd og rummelighed til at give alle børn en varieret skoledag med bevægelse og aktiviteter i lokalsamfundet? 0.6272234436253777 \n",
      "\n",
      "Aktivering skal få folk i varig beskæftigelse 0.5649429975834273 \n",
      "\n",
      "Det er derfor uacceptabelt, at der ikke er et tilstrækkeligt antal pladser. 0.5750857932632703 \n",
      "\n",
      "Arbejdsløsheden  er  stadig  alt  for  høj,  alt  for  mange  unge efterlades  uden  praktikpladser,  og  Danmark  er  ikke  rustet  til  fremdrift  og  optimisme. 0.6480994521450083 \n",
      "\n",
      "• Gøre børnehaveklassen obligatorisk, så undervisningen her kan lægges til grund for arbejdet i 1. klasse. 0.6225831576980719 \n",
      "\n",
      "Og udbygge vores økologiske styrkeposition. 0.5608673192639926 \n",
      "\n",
      "Gratis og gode uddannelser skal skabe lighed 0.7335903032423797 \n",
      "\n",
      "Det kan f.eks. foregå ved, at skolen stiller lokaler og faciliteter til rådighed for lokale foreninger, iværksættere og frivillige, som til gengæld kan bidrage til undervisningen i håndværk, iværksætteri, bæredygtig udvikling, og meget mere. 0.57355016781026 \n",
      "\n",
      "Uddannelse og undervisning skal være forskningsbaseret 0.9063426557019786 \n",
      "\n",
      "- uden brugerbetaling   og på sigt også med sikring af indkomst under uddannelse. 0.6986011140997748 \n",
      "\n",
      "Udsatte børn og unge 0.5887283883821781 \n",
      "\n",
      "Lige anerkendelse og vægtning til de håndværksmæssige fag 0.7007572548395573 \n",
      "\n",
      "Udviklingen i informationsteknologien, IT, er en vigtig faktor i fornyelsen. 0.5691673047930266 \n",
      "\n",
      "Erhverv og Iværksætteri 0.605645352843086 \n",
      "\n",
      "Alternativet ønsker gennem hele grundskolen obligatoriske forløb, der skal styrke elevernes forståelse af og praktiske erfaring med klimaforandringer, miljø og økologi. 0.5619502877982026 \n",
      "\n",
      "Det betyder bl.a. styrket uddannelse af ledere på plejehjem, daginstitutioner og sygehusafdelinger. 0.7103512694314564 \n",
      "\n",
      "Når vi vil en meget bedre indsats for de udsatte  HYPERLINK \"https://www.socialdemokratiet.dk/da/politik/boern/\" \\o \"Boern\" børn og unge i Danmark, er det ikke på grund af medlidenhed eller hattedameri. 0.6378993270751597 \n",
      "\n",
      "En 10-årsplan skal sikre, at ingen boligområder, skoler eller uddannelsesinstitutioner i fremtiden har mere end max 30 pct. ikke-vestlige indvandrere og efterkommere. 0.6297103474520318 \n",
      "\n",
      "Resocialiseringen skal styrkes på baggrund af forskningsbaserede tiltag, som vi ved virker, hvilket bl.a. betyder, at der skal skabes bedre rammer for frivillige, sociale og pædagogiske indsatser allerede i fængslerne. 0.5653585639368408 \n",
      "\n",
      "Vi har ikke råd til at efterlade flere unge i venteposition eller lade flere børns læring blive tabt på gulvet. 0.5746736599963335 \n",
      "\n",
      "Vi ønsker et samfund, hvor vi ikke kun møder kunsten og kulturen på vores kulturinstitutioner men også i det offentlige rum, på vores arbejdspladser, i børnehaven, folkeskolen og på ungdomsuddannelsen. 0.6428384826223574 \n",
      "\n",
      "• øge beskæftigelse blandt indvandrere gennem bedre uddannelse  og målrettede isbryderordninger på arbejdsmarkedet. 0.7576018581248978 \n",
      "\n",
      "Vi har en god folkeskole. 0.6125302666468111 \n",
      "\n",
      "For at de nye tiltag i reformen skal blive en succes, kræver det opbakning fra lærerne. 0.6070129382188931 \n",
      "\n",
      "Vi får brug for tusinder  HYPERLINK \"https://www.socialdemokratiet.dk/da/politik/erhverv/\" \\o \"Erhverv\" flere faglærte frem mod 2025. 0.652709182101024 \n",
      "\n",
      "Optagene stiger, og flere får en praktikplads. 0.5882620616353704 \n",
      "\n",
      "Det høje elevtal begrænser også lærernes mulighed for at tage individuelle hensyn til eleverne. 0.6272265891108998 \n",
      "\n",
      "Vi vil give alle unge adgang til gratis psykologhjælp og styrke den pædagogisk-psykologiske rådgivning, så ingen børn, der mistrives, overses og efterlades. 0.5877977236383456 \n",
      "\n",
      "I år vil cirka  HYPERLINK \"http://www.kraka.org/sites/default/files/public/ca._15.000_personer_skoennes_at_opbruge_deres_dagpengeret_i_2015_0.pdf\" \\t \"_blank\" 15.000 danskere opbruge deres ret til dagpenge. 0.5805757330147229 \n",
      "\n",
      "– samt opbygningen af en faglig, personlig og social ballast hos vores børn, der gør dem til dygtige, selvstændige og ansvarlige mennesker, når de bliver voksne. 0.5806379992641294 \n",
      "\n",
      "De er bagud på point i forhold til deres klassekammerater – både sprogligt og socialt. 0.5595092783250228 \n",
      "\n",
      "Fri forskning og demokratiske uddannelser 0.8251574687573985 \n",
      "\n",
      "Det  betyder,  at  alle  unge  får  en  reel uddannelsesgaranti. 0.5914359731756871 \n",
      "\n",
      "Til gengæld skal vi ikke spare yderligere på daginstitutioner, folkeskoler og videregående uddannelser. 0.7892427682534189 \n",
      "\n",
      "Lærerne skal have helt moderne redskaber i undervisningen. 0.6131508619750455 \n",
      "\n",
      "SF er glade for den styrkelse af folkeskolen, der blev vedtaget med folkeskolereformen. 0.6196779012690237 \n",
      "\n",
      "Der er en nærmest blind tro på, at alt kan effektiviseres og  HYPERLINK \"https://www.socialdemokratiet.dk/da/politik/landdistrikter/\" \\o \"Landdistrikter\" centraliseres. 0.5902270753029201 \n",
      "\n",
      "Med test, stopprøver og en fast plads i den sorte skole? 0.5854522305798475 \n",
      "\n",
      "stærkere netværk omkring de unge 0.6682716260458301 \n",
      "\n",
      "minimering af voksenuddannelsen, 0.969975591351379 \n",
      "\n",
      "De visioner, vi lægger frem nu, handler især om sundhed, uddannelse, tryghed og medindflydelse. 0.6073760534418662 \n",
      "\n",
      "Op imod en femtedel af vores folkeskoleelever forlader i dag skolen uden at have de nødvendige færdigheder til at kunne gennemføre en ungdomsuddannelse. 0.7346628783822504 \n",
      "\n",
      "En af folkeskolens vigtigste kvaliteter er, at den kan give alle elever de bedste muligheder for at lære uanset familiens sociale, økonomiske og uddannelsesmæssige baggrund. 0.6865378231735431 \n",
      "\n",
      "I debatten om opkvalificering og efteruddannelse kommer det let til at lyde, som om Danmark ikke har brug for ufaglærte. 0.6878885091848796 \n",
      "\n",
      "Dagtilbud skal også forberede børnene til livet i skolen. 0.5847349688685106 \n",
      "\n",
      "Bliver det også sådan for  HYPERLINK \"https://www.socialdemokratiet.dk/da/politik/boern/\" \\o \"Boern\" vores børn? 0.671245271694479 \n",
      "\n",
      "Gøre læreruddannelsen til universitetsuddannelse 0.963774996550883 \n",
      "\n",
      "Enhedslisten vil også fokusere på de særligt lave ydelser for unge på kontanthjælp eller dagpenge 0.621714075495264 \n",
      "\n",
      "- Friheden til at vælge og til at kombinere sin egen uddannelse skal øges 0.7854586746696175 \n",
      "\n",
      "Vi skal give folkeskoler med særligt store integrationsopgaver et økonomisk løft. 0.588204119310834 \n",
      "\n",
      "Størstedelen af en ungdomsårgang tager i dag en ungdomsuddannelse, og for de fleste unge falder valget på stx, hhx og htx. 0.6975784130357285 \n",
      "\n",
      "Derfor skal emnet ind som et gennemgående og obligatorisk tværfagligt forløb i folkeskolen, der senere kan blive fulgt op på ungdomsuddannelserne og de videregående uddannelser. 0.8278314377580626 \n",
      "\n",
      "• Gøre engelsk obligatorisk fra 3. klasse. 0.6656354532839311 \n",
      "\n",
      "EN STÆRK FOLKESKOLE 0.6354847006802535 \n",
      "\n",
      "Og de unge skal hurtigere gennem deres uddannelser. 0.8993479156957015 \n",
      "\n",
      "Det går ud over  HYPERLINK \"https://www.socialdemokratiet.dk/da/politik/udlaendingepolitik/integrationspolitik-den-nye-frihedskamp/\" \\o \"Integrationspolitik: Den nye frihedskamp\" integrationen. 0.6450787440657311 \n",
      "\n",
      "hvor universiteter og andre uddannelser samarbejder med virksomhederne. 0.7986032744353269 \n",
      "\n",
      "Det lille lokale gymnasium uden for de store byer bliver særligt hårdt ramt. Det kan føre til lukninger, og at færre unge tager en uddannelse. 0.6601526914229774 \n",
      "\n",
      "og der skal være penge til at skifte utidssvarende undervisningsmateriale ud. 0.5880981031595394 \n",
      "\n",
      "Der skal være  plads til faglig indlæring, 0.7253315252761701 \n",
      "\n",
      "Der er indført ét års fleksibel barselsorlov. 0.5615123628005525 \n",
      "\n",
      "HYPERLINK \"https://www.venstre.dk/nyheder/vi-skal-skaerpe-indsatsen-for-unge-kriminelle\" Læs mere om vores udspil til at oprette en særlig ungdomsdomstol. 0.6480455942644009 \n",
      "\n",
      "Derfor skal vores almene sektor styrkes. 0.612023617080522 \n",
      "\n",
      "og at de forskellige uddannelser supplerer hinanden godt. 0.7292100342200557 \n",
      "\n",
      "-    vil sikre fremtiden for vore børn og unge, 0.6346932345561602 \n",
      "\n",
      "som lærere, elev og forældre har en dialog om. 0.6114496818011879 \n",
      "\n",
      "øger gennemsigtigheden og målretter kampagner og tilbud til dem, der har et misbrug. 0.5802129630308233 \n",
      "\n",
      "Derfor skal der være lige adgang til eksempelvis uddannelse og arbejdsmarked. 0.8388971982679234 \n",
      "\n",
      "Uddannelse af højeste international kvalitet er en forudsætning for, at danske virksomheder også i fremtiden kan klare sig i en stadig hårdere global konkurrence. 0.5694700819602632 \n",
      "\n",
      "matematik i 6.  klasse, 0.6846930891494091 \n",
      "\n",
      "•Der skal ske en opblødning af overgangen mellem børnehaveklasse og skolen. 0.6041248213723976 \n",
      "\n",
      "men der var ingen, og det vidste de. 0.6238425279911911 \n",
      "\n",
      "Der bliver længere mellem uddannelsestilbuddene rundt om i landet, og en række ungdomsuddannelser er i stor risiko for at lukke. 0.6574976057253316 \n",
      "\n",
      "Med sundhedsreformen uddanner vi 100 flere praktiserende læger i år 2020, men det er forsat ukendt hvor mange praktiserende læger, der uddannes i årene efter 2020. 0.7043417905450786 \n",
      "\n",
      "God uddannelse og en SU, man kan leve af, er hjørnesten i velfærdssamfundet. 0.7529394870141327 \n",
      "\n",
      "Valgmulighederne skal også omfatte tilbud om børnepasning. 0.5642167529972244 \n",
      "\n",
      "Alternativet ønsker, at der oprettes offentlige uddannelser, så de alternative behandlere kan opnå de samme vilkår som øvrige behandlere og sundhedsmedarbejdere. 0.5737251300771613 \n",
      "\n",
      "Det er den største opgave for dansk økonomi lige nu: Flere faglærte til virksomhederne. Bedre uddannelsesmuligheder for medarbejderne. 0.6105511312860531 \n",
      "\n",
      "• Arbejdsmarkedet er gjort mere rummeligt ved oprettelse af servicejob til ældre ledige, fleksjob til mennesker med nedsat arbejdsevne og skånejob til mennesker på førtidspension. 0.567152615143635 \n",
      "\n",
      "Forlænge læreruddannelsen til fem år 0.801103816520732 \n",
      "\n",
      "Den danske folkeskole har brug for dygtige og engagerede lærere. 0.5771424658262765 \n",
      "\n",
      "Nu er langt flere indvandrere i uddannelse og arbejde, og 7 ud af 10 føler sig godt integrerede. 0.5913185554008927 \n",
      "\n",
      "Derfor vil vi  reformere  tildelingen  af  uddannelsesmidler,  så  d er tages sociale  hensyn  og  sikres  uddannelse  i  hele  landet. 0.6582468825562886 \n",
      "\n",
      "Vi vil vende den udvikling gennem en milliardinvestering i folkeskolen. 0.5612434996001383 \n",
      "\n",
      "Det er udtryk for et usundt syn på uddannelse. 0.7446649167699584 \n",
      "\n",
      "For at få skattenedslaget skal man have været fuldtidsbeskæftiget fra 60 års alderen. 0.578424936234121 \n",
      "\n",
      "Det vil gøre det muligt at løfte det faglige niveau og give ro til de børn, der lige nu kobles af i de overfyldte klasser. 0.6470727141688011 \n",
      "\n",
      "Mod uddannelse og resocialisering. 0.7967611432656786 \n",
      "\n",
      "UNGE OG UDDANNELSE 0.9579803237332781 \n",
      "\n",
      "Så nu skal vi videre. 0.652347201942292 \n",
      "\n",
      "800.000 offentligt ansatte skal have de bedste muligheder for faglig udvikling. 0.6292184007586519 \n",
      "\n",
      "Hvad de gør i deres fritid, må de selv om. 0.5644812303747284 \n",
      "\n",
      "- Naturgenopretningen udbygges. 0.6353458497800706 \n",
      "\n",
      "Flere voksne i børnehaverne 0.6122928872532651 \n",
      "\n",
      "En fremtid for vore børn og unge 0.63606829411905 \n",
      "\n",
      "Der skal udvikles konkrete værktøjer for pædagoger og lærere til at bekæmpe negativ social arv, 0.6295721229637524 \n",
      "\n",
      "Folkeskolen skal gøre børnene klar til videre uddannelse. 0.8294424345201344 \n",
      "\n",
      "Vi vil prioritere investeringer i børn, sundhed, uddannelse og forskning og målrette sociale ydelser til dem, der har størst behov. 0.6697964719994037 \n",
      "\n",
      "Kvalitet kræver det rigtigt uddannede personale, og at personalet får mulighed for at bringe deres kompetencer i spil. 0.6228701656800455 \n",
      "\n",
      "Vi ønsker bedre daginstitutioner med mere plads til børn og voksne. 0.5917834985483524 \n",
      "\n",
      "Nu skal vi løfte kvaliteten og relevansen af uddannelserne og forskningen, så de passer bedre til erhvervslivets og samfundets behov. 0.7392301744756034 \n",
      "\n",
      "Erhvervsuddannelser forsømt som ungdomsuddannelse 0.9282281183099946 \n",
      "\n",
      "Efteruddannelse er den største opgave i dansk økonomi 0.6195524116439544 \n",
      "\n",
      "naturfagene i 8. klasse. 0.6448566605670603 \n",
      "\n",
      "• En fornyelse af 10. klasse er gennemført, for at lette overgangen til ungdomsuddannelserne, gennem en styrkelse af de unges faglige og personlige forudsætninger. 0.7914349248090042 \n",
      "\n",
      "Derudover vil vi styrke pædagoguddannelsen med både timer og praksiserfaring og give alle dagplejere en grunduddannelse. 0.7364030054969213 \n",
      "\n",
      "De unges iværksættertalenter og skaberkræfter skal styrkes, så de evner at møde en uvis fremtid med en stærk selvbevidsthed, forandringsevner og handledygtighed. 0.622216314861406 \n",
      "\n",
      "og bedre rettigheder til uddannelse, 0.8430792701023273 \n",
      "\n",
      "Obligatorisk børnehaveklasse 0.6491600598317983 \n",
      "\n",
      "Alle skoler skal være selvejende. 0.5601146225772307 \n",
      "\n",
      "Massive investeringer i uddannelse og forskning med 10 mia. kr. i perioden 2007-2012. 0.6472800147677628 \n",
      "\n",
      "Og det gælder uanset om man er faglært tømrer, kemiingeniør eller universitetslærer. 0.632694074087342 \n",
      "\n",
      "forbedre rammerne omkring skolen, 0.7065173930395143 \n",
      "\n",
      "SF  har  udarbejdet  omfattende  reformplaner  –  både  for folkeskolen, ungdomsuddannelserne  og  de  videregående  uddannelser. 0.8599678420226979 \n",
      "\n",
      "Frem til og med 2010 afsættes i alt 10 mia.kr. til forskning, udvikling og uddannelse. 0.7174277542545456 \n",
      "\n",
      "og skoler. 0.6136183552374777 \n",
      "\n",
      "En ny folkeskole 0.6125302666468111 \n",
      "\n",
      "Udgifterne til specialundervisning i folkeskolen er eksploderet, mens der er blevet skåret ned på den almindelige undervisning i samme periode. 0.651009710009063 \n",
      "\n",
      "Samtidig skal vi sætte folkeskolen fri, så undervisningen ikke dikteres af nationale test og læringsmål. 0.5799307478201093 \n",
      "\n",
      "Vi vil:•Indsatsen for bedre kvalitet i folkeskolen skal forstærkes 0.6125243722274831 \n",
      "\n",
      "Uddannelse skal kunne favne og styrke både håndværksmæssige, åndelige og boglige evner. 0.7911400163286881 \n",
      "\n",
      "Flere og flere børn og unge starter med at ryge – 40 nye unge rygere om dagen. 0.5849207460378754 \n",
      "\n",
      "Vi har to mål med efteruddannelse og opkvalificering af ufaglærte: 0.83201267148535 \n",
      "\n",
      "Flere unge med etnisk minoritetsbaggrund har ikke friheden til selv at vælge deres venner, kæreste, uddannelse eller job. 0.7905217236911408 \n",
      "\n",
      "Vi kan få alle med i opsvinget, hvis vi fører den rigtige politik og satser på uddannelse. 0.7210913831248595 \n",
      "\n",
      "Boligbyggeri, bedre isolering, kloakrenovation, målrettet regionalpolitik og flere iværksættere. 0.5815628150793632 \n",
      "\n",
      "• satse på uddannelse, efteruddannelse og forskning. 0.8955651118565754 \n",
      "\n",
      "og at mennesker med faglige kvalifikationer skal kunne undervise, hvis de tilegner sig pædagogiske kvalifikationer. 0.6892070131131229 \n",
      "\n",
      "Ansættelse af flere i den offentlige sektor til børnepasning, folkeskole, uddannelse, forskning mv. 0.7164131823728673 \n",
      "\n",
      "De sidste fem år er der lavet reformer af folkeskolen. 0.6635242563248598 \n",
      "\n",
      "Det vil skabe yderligere 12-14.000 nye arbejdspladser. 0.5740631143536816 \n",
      "\n",
      "- Målrettet indsats med arbejdspladsfastholdelse, jobtræning, job på særlige vilkår, fleksjob. 0.6140072262702443 \n",
      "\n",
      "I stedet for at udstede den ene arbejdstilladelse efter den anden til udenlandske arbejdstagere, som virksomheder må hente hertil, mener Socialdemokratiet, at vi skal hjælpe flere herhjemme med at få en  HYPERLINK \"https://www.socialdemokratiet.dk/da/politik/erhvervsuddannelser/\" \\o \"Erhvervsuddannelser\" erhvervsuddannelse. 0.6796541286300339 \n",
      "\n",
      "og med adgang til uddannelse 0.9524704898796735 \n",
      "\n",
      "Sammen med andre ungdomsuddannelser giver stx, hhx og htx unge frihed og muligheder for at være en del af det danske samfund. 0.7104586388689338 \n",
      "\n",
      "I dag er tilgangen i for høj grad baseret på følelser. 0.5669707019653373 \n",
      "\n",
      "Derfor skal vi også stoppe besparelserne på uddannelse. 0.8143820855316242 \n",
      "\n",
      "4-årigt gymnasium 0.7845229404087664 \n",
      "\n",
      "Flere skal indkaldes og i længere tid. Værnepligtige skal efter endt uddannelse kunne indgå i et troværdigt mobiliseringsforsvar. 0.6522243412190278 \n",
      "\n",
      "Vision for videregående uddannelser 0.9083519723844244 \n",
      "\n",
      "En kontrakt hvor alle kan regne med fællesskabets hjælp til at få  HYPERLINK \"https://www.socialdemokratiet.dk/da/politik/uddannelse/\" \\o \"Uddannelse\" en god uddannelse. 0.8505287621862543 \n",
      "\n",
      "Først og fremmest af hensyn til børnene skal forældrene have flere muligheder for at indrette sig fleksibelt . 0.5690619325545115 \n",
      "\n",
      "Vi vil stoppe en udvikling hvor forældre vælger privatskoler alene fordi de er utrygge ved deres lokale folkeskole. 0.5644028299764997 \n",
      "\n",
      "Uddannelse virker - når man er motiveret, 0.8176771765368658 \n",
      "\n",
      "Alle personalegrupper skal have tilbud om bedre kompetenceudvikling. 0.592725802946509 \n",
      "\n",
      "Skolen skal gøres mere rummelig. 0.5976343450224584 \n",
      "\n",
      "Det faglige niveau skal være højere, og vi vil gøre det lettere for de unge at vælge rigtigt første gang. 0.6623916773215774 \n",
      "\n",
      "Der skal være plads til alle på arbejdsmarkedet. 0.585897217766628 \n",
      "\n",
      "Så vores boligområder, skoler og arbejdspladser kan følge med. 0.664431561359834 \n",
      "\n",
      "Der forudsættes en gradvis indfasning i takt med, at forskningscentre og uddannelsesinstitutioner kan absorbere midlerne. 0.6494894041116308 \n",
      "\n",
      "Derfor skal vi styrke landets erhvervsuddannelser. 0.7000620636335437 \n",
      "\n",
      "SF arbejder for bedre uddannelsesmuligheder, et rummeligt arbejdsmarked og flere handicapvenlige boliger. 0.5904824606750694 \n",
      "\n",
      "Ingen rigtig eller forkert uddannelse: Et opgør med uddannelsessnobberi 0.7830282519811448 \n",
      "\n"
     ]
    }
   ],
   "source": [
    "#sort by closest distance to \"education\"\n",
    "\n",
    "df_mean_reduced_sorted = df_mean_reduced.sort_values(\"distance_education\", ascending = False)\n",
    "\n",
    "#extract example text\n",
    "example_texts = df_mean_reduced_sorted.iloc[0:int(18653*0.1)].sample(n = 300, random_state = 342)\n",
    "\n",
    "#show score and text for a couple\n",
    "for text,score in zip(example_texts[\"text\"],example_texts[\"distance_education\"]):\n",
    "    print(text,score,\"\\n\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Convergent and discriminant validity"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>country</th>\n",
       "      <th>countryname</th>\n",
       "      <th>oecdmember</th>\n",
       "      <th>eumember</th>\n",
       "      <th>edate</th>\n",
       "      <th>date</th>\n",
       "      <th>party</th>\n",
       "      <th>partyname</th>\n",
       "      <th>partyabbrev</th>\n",
       "      <th>parfam</th>\n",
       "      <th>...</th>\n",
       "      <th>per608_3</th>\n",
       "      <th>per703_1</th>\n",
       "      <th>per703_2</th>\n",
       "      <th>rile</th>\n",
       "      <th>planeco</th>\n",
       "      <th>markeco</th>\n",
       "      <th>welfare</th>\n",
       "      <th>intpeace</th>\n",
       "      <th>datasetversion</th>\n",
       "      <th>id_perm</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>13.0</td>\n",
       "      <td>Denmark</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1945-10-30</td>\n",
       "      <td>194510.0</td>\n",
       "      <td>13220.0</td>\n",
       "      <td>Danish Communist Party</td>\n",
       "      <td>DKP</td>\n",
       "      <td>20.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-21.200</td>\n",
       "      <td>2.400</td>\n",
       "      <td>0.000</td>\n",
       "      <td>15.600</td>\n",
       "      <td>1.600</td>\n",
       "      <td>2021a</td>\n",
       "      <td>VONCDV</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>13.0</td>\n",
       "      <td>Denmark</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1945-10-30</td>\n",
       "      <td>194510.0</td>\n",
       "      <td>13320.0</td>\n",
       "      <td>Social Democratic Party</td>\n",
       "      <td>SD</td>\n",
       "      <td>30.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-23.000</td>\n",
       "      <td>12.500</td>\n",
       "      <td>0.000</td>\n",
       "      <td>10.400</td>\n",
       "      <td>4.200</td>\n",
       "      <td>2021a</td>\n",
       "      <td>HJW2XP</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>13.0</td>\n",
       "      <td>Denmark</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1945-10-30</td>\n",
       "      <td>194510.0</td>\n",
       "      <td>13410.0</td>\n",
       "      <td>Danish Social-Liberal Party</td>\n",
       "      <td>RV</td>\n",
       "      <td>40.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-15.700</td>\n",
       "      <td>6.300</td>\n",
       "      <td>1.600</td>\n",
       "      <td>12.500</td>\n",
       "      <td>4.700</td>\n",
       "      <td>2021a</td>\n",
       "      <td>ZCMMSZ</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>13.0</td>\n",
       "      <td>Denmark</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1945-10-30</td>\n",
       "      <td>194510.0</td>\n",
       "      <td>13420.0</td>\n",
       "      <td>Liberals</td>\n",
       "      <td>V</td>\n",
       "      <td>40.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>16.400</td>\n",
       "      <td>9.800</td>\n",
       "      <td>9.800</td>\n",
       "      <td>1.600</td>\n",
       "      <td>1.600</td>\n",
       "      <td>2021a</td>\n",
       "      <td>K2B256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>13.0</td>\n",
       "      <td>Denmark</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1945-10-30</td>\n",
       "      <td>194510.0</td>\n",
       "      <td>13620.0</td>\n",
       "      <td>Conservative People’s Party</td>\n",
       "      <td>KF</td>\n",
       "      <td>60.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.200</td>\n",
       "      <td>1.600</td>\n",
       "      <td>2.300</td>\n",
       "      <td>0.800</td>\n",
       "      <td>2.300</td>\n",
       "      <td>2021a</td>\n",
       "      <td>G7GB47</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>240</th>\n",
       "      <td>13.0</td>\n",
       "      <td>Denmark</td>\n",
       "      <td>10.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>2019-06-05</td>\n",
       "      <td>201906.0</td>\n",
       "      <td>13410.0</td>\n",
       "      <td>Danish Social-Liberal Party</td>\n",
       "      <td>RV</td>\n",
       "      <td>40.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3.387</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-19.516</td>\n",
       "      <td>1.129</td>\n",
       "      <td>1.613</td>\n",
       "      <td>19.516</td>\n",
       "      <td>0.806</td>\n",
       "      <td>2021a</td>\n",
       "      <td>RNTIEW</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>241</th>\n",
       "      <td>13.0</td>\n",
       "      <td>Denmark</td>\n",
       "      <td>10.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>2019-06-05</td>\n",
       "      <td>201906.0</td>\n",
       "      <td>13420.0</td>\n",
       "      <td>Liberals</td>\n",
       "      <td>V</td>\n",
       "      <td>40.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-17.483</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>33.566</td>\n",
       "      <td>0.000</td>\n",
       "      <td>2021a</td>\n",
       "      <td>33QY7G</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>242</th>\n",
       "      <td>13.0</td>\n",
       "      <td>Denmark</td>\n",
       "      <td>10.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>2019-06-05</td>\n",
       "      <td>201906.0</td>\n",
       "      <td>13620.0</td>\n",
       "      <td>Conservative People’s Party</td>\n",
       "      <td>KF</td>\n",
       "      <td>60.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.337</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-7.202</td>\n",
       "      <td>3.395</td>\n",
       "      <td>2.366</td>\n",
       "      <td>26.235</td>\n",
       "      <td>0.000</td>\n",
       "      <td>2021a</td>\n",
       "      <td>8XKE6Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>243</th>\n",
       "      <td>13.0</td>\n",
       "      <td>Denmark</td>\n",
       "      <td>10.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>2019-06-05</td>\n",
       "      <td>201906.0</td>\n",
       "      <td>13720.0</td>\n",
       "      <td>Danish People’s Party</td>\n",
       "      <td>DF</td>\n",
       "      <td>70.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>32.979</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>22.340</td>\n",
       "      <td>0.000</td>\n",
       "      <td>2021a</td>\n",
       "      <td>EH8CNR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>244</th>\n",
       "      <td>13.0</td>\n",
       "      <td>Denmark</td>\n",
       "      <td>10.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>2019-06-05</td>\n",
       "      <td>201906.0</td>\n",
       "      <td>13730.0</td>\n",
       "      <td>The New Right</td>\n",
       "      <td></td>\n",
       "      <td>70.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.839</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.933</td>\n",
       "      <td>1.173</td>\n",
       "      <td>4.252</td>\n",
       "      <td>13.636</td>\n",
       "      <td>0.587</td>\n",
       "      <td>2021a</td>\n",
       "      <td>7B7K6Y</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>245 rows × 174 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     country countryname  oecdmember  eumember       edate      date    party  \\\n",
       "0       13.0     Denmark         0.0       0.0  1945-10-30  194510.0  13220.0   \n",
       "1       13.0     Denmark         0.0       0.0  1945-10-30  194510.0  13320.0   \n",
       "2       13.0     Denmark         0.0       0.0  1945-10-30  194510.0  13410.0   \n",
       "3       13.0     Denmark         0.0       0.0  1945-10-30  194510.0  13420.0   \n",
       "4       13.0     Denmark         0.0       0.0  1945-10-30  194510.0  13620.0   \n",
       "..       ...         ...         ...       ...         ...       ...      ...   \n",
       "240     13.0     Denmark        10.0      10.0  2019-06-05  201906.0  13410.0   \n",
       "241     13.0     Denmark        10.0      10.0  2019-06-05  201906.0  13420.0   \n",
       "242     13.0     Denmark        10.0      10.0  2019-06-05  201906.0  13620.0   \n",
       "243     13.0     Denmark        10.0      10.0  2019-06-05  201906.0  13720.0   \n",
       "244     13.0     Denmark        10.0      10.0  2019-06-05  201906.0  13730.0   \n",
       "\n",
       "                       partyname partyabbrev  parfam  ...  per608_3  per703_1  \\\n",
       "0         Danish Communist Party         DKP    20.0  ...       NaN       NaN   \n",
       "1        Social Democratic Party          SD    30.0  ...       NaN       NaN   \n",
       "2    Danish Social-Liberal Party          RV    40.0  ...       NaN       NaN   \n",
       "3                       Liberals           V    40.0  ...       NaN       NaN   \n",
       "4    Conservative People’s Party          KF    60.0  ...       NaN       NaN   \n",
       "..                           ...         ...     ...  ...       ...       ...   \n",
       "240  Danish Social-Liberal Party          RV    40.0  ...       0.0     3.387   \n",
       "241                     Liberals           V    40.0  ...       0.0     0.000   \n",
       "242  Conservative People’s Party          KF    60.0  ...       0.0     1.337   \n",
       "243        Danish People’s Party          DF    70.0  ...       0.0     0.000   \n",
       "244                The New Right                70.0  ...       0.0     4.839   \n",
       "\n",
       "     per703_2    rile  planeco  markeco  welfare  intpeace  datasetversion  \\\n",
       "0         NaN -21.200    2.400    0.000   15.600     1.600           2021a   \n",
       "1         NaN -23.000   12.500    0.000   10.400     4.200           2021a   \n",
       "2         NaN -15.700    6.300    1.600   12.500     4.700           2021a   \n",
       "3         NaN  16.400    9.800    9.800    1.600     1.600           2021a   \n",
       "4         NaN  -0.200    1.600    2.300    0.800     2.300           2021a   \n",
       "..        ...     ...      ...      ...      ...       ...             ...   \n",
       "240       0.0 -19.516    1.129    1.613   19.516     0.806           2021a   \n",
       "241       0.0 -17.483    0.000    0.000   33.566     0.000           2021a   \n",
       "242       0.0  -7.202    3.395    2.366   26.235     0.000           2021a   \n",
       "243       0.0  32.979    0.000    0.000   22.340     0.000           2021a   \n",
       "244       0.0   2.933    1.173    4.252   13.636     0.587           2021a   \n",
       "\n",
       "     id_perm  \n",
       "0     VONCDV  \n",
       "1     HJW2XP  \n",
       "2     ZCMMSZ  \n",
       "3     K2B256  \n",
       "4     G7GB47  \n",
       "..       ...  \n",
       "240   RNTIEW  \n",
       "241   33QY7G  \n",
       "242   8XKE6Y  \n",
       "243   EH8CNR  \n",
       "244   7B7K6Y  \n",
       "\n",
       "[245 rows x 174 columns]"
      ]
     },
     "execution_count": 109,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#get overview of datafile from Manifesto\n",
    "\n",
    "dk_main = pd.read_parquet(\"dk_main.parquet\")\n",
    "dk_main"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mean_vector</th>\n",
       "      <th>id</th>\n",
       "      <th>text</th>\n",
       "      <th>cmp_code</th>\n",
       "      <th>eu_code</th>\n",
       "      <th>manifesto_id</th>\n",
       "      <th>party</th>\n",
       "      <th>date</th>\n",
       "      <th>tokens</th>\n",
       "      <th>distance_military</th>\n",
       "      <th>...</th>\n",
       "      <th>per608_3</th>\n",
       "      <th>per703_1</th>\n",
       "      <th>per703_2</th>\n",
       "      <th>rile</th>\n",
       "      <th>planeco</th>\n",
       "      <th>markeco</th>\n",
       "      <th>welfare</th>\n",
       "      <th>intpeace</th>\n",
       "      <th>datasetversion</th>\n",
       "      <th>id_perm</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>[0.026116159, -0.007294556, -0.055573158, -0.0...</td>\n",
       "      <td>2465</td>\n",
       "      <td>for mere uddannelse</td>\n",
       "      <td>506</td>\n",
       "      <td>None</td>\n",
       "      <td>13229_200502</td>\n",
       "      <td>13229.0</td>\n",
       "      <td>200502.0</td>\n",
       "      <td>[uddannelse]</td>\n",
       "      <td>-0.028382</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-42.152</td>\n",
       "      <td>4.036</td>\n",
       "      <td>0.448</td>\n",
       "      <td>13.901</td>\n",
       "      <td>12.556</td>\n",
       "      <td>2021a</td>\n",
       "      <td>GMUFUD</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>[0.026116159, -0.007294556, -0.055573158, -0.0...</td>\n",
       "      <td>2429</td>\n",
       "      <td>Vi vil have flere i uddannelse.</td>\n",
       "      <td>506</td>\n",
       "      <td>None</td>\n",
       "      <td>13229_200502</td>\n",
       "      <td>13229.0</td>\n",
       "      <td>200502.0</td>\n",
       "      <td>[uddannelse]</td>\n",
       "      <td>-0.028382</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-42.152</td>\n",
       "      <td>4.036</td>\n",
       "      <td>0.448</td>\n",
       "      <td>13.901</td>\n",
       "      <td>12.556</td>\n",
       "      <td>2021a</td>\n",
       "      <td>GMUFUD</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>[0.0039131385, 0.021633198, -0.0467616, -0.068...</td>\n",
       "      <td>2477</td>\n",
       "      <td>og en bedre ungdomsuddannelse.</td>\n",
       "      <td>506</td>\n",
       "      <td>None</td>\n",
       "      <td>13229_200502</td>\n",
       "      <td>13229.0</td>\n",
       "      <td>200502.0</td>\n",
       "      <td>[god, ungdomsuddannelse]</td>\n",
       "      <td>0.059606</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-42.152</td>\n",
       "      <td>4.036</td>\n",
       "      <td>0.448</td>\n",
       "      <td>13.901</td>\n",
       "      <td>12.556</td>\n",
       "      <td>2021a</td>\n",
       "      <td>GMUFUD</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>[-0.06522093, -0.00727346, -0.059767094, -0.10...</td>\n",
       "      <td>2475</td>\n",
       "      <td>Vi ved, at der er brug for at alle får mere ud...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>13229_200502</td>\n",
       "      <td>13229.0</td>\n",
       "      <td>200502.0</td>\n",
       "      <td>[brug, få, uddannelse]</td>\n",
       "      <td>0.138609</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-42.152</td>\n",
       "      <td>4.036</td>\n",
       "      <td>0.448</td>\n",
       "      <td>13.901</td>\n",
       "      <td>12.556</td>\n",
       "      <td>2021a</td>\n",
       "      <td>GMUFUD</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>[-0.009901553, -0.028200021, -0.04056593, -0.1...</td>\n",
       "      <td>2482</td>\n",
       "      <td>Under uddannelsen kommer en arbejdsløs ind i v...</td>\n",
       "      <td>411</td>\n",
       "      <td>None</td>\n",
       "      <td>13229_200502</td>\n",
       "      <td>13229.0</td>\n",
       "      <td>200502.0</td>\n",
       "      <td>[uddannelse, arbejdsløs, vikariat]</td>\n",
       "      <td>0.063881</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-42.152</td>\n",
       "      <td>4.036</td>\n",
       "      <td>0.448</td>\n",
       "      <td>13.901</td>\n",
       "      <td>12.556</td>\n",
       "      <td>2021a</td>\n",
       "      <td>GMUFUD</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18648</th>\n",
       "      <td>[-0.039950237, -0.04162613, 0.034179054, -0.13...</td>\n",
       "      <td>2266</td>\n",
       "      <td>Med kommunisterne  Fremad - ad nye veje  10 må...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>13220_197312</td>\n",
       "      <td>13220.0</td>\n",
       "      <td>197312.0</td>\n",
       "      <td>[kommunist, fremad, ad, ny, vej, måned, danmar...</td>\n",
       "      <td>0.594765</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-30.200</td>\n",
       "      <td>5.900</td>\n",
       "      <td>1.200</td>\n",
       "      <td>2.300</td>\n",
       "      <td>2.300</td>\n",
       "      <td>2021a</td>\n",
       "      <td>N18DV9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18649</th>\n",
       "      <td>[-0.0009925645, -0.023351314, -0.0008756822, -...</td>\n",
       "      <td>15504</td>\n",
       "      <td>Nu gælder det Deres hus...  Retten til at eje ...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>13620_196611</td>\n",
       "      <td>13620.0</td>\n",
       "      <td>196611.0</td>\n",
       "      <td>[gælde, hus, retten, eje, egen, hjem, gode, bå...</td>\n",
       "      <td>0.452430</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>35.700</td>\n",
       "      <td>0.000</td>\n",
       "      <td>28.600</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>2021a</td>\n",
       "      <td>WVIU89</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18650</th>\n",
       "      <td>[-0.03026723, -0.095034555, 0.019763567, -0.11...</td>\n",
       "      <td>12487</td>\n",
       "      <td>Har De et spørgsmål til Centrum-Demokraterne? ...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>13330_197501</td>\n",
       "      <td>13330.0</td>\n",
       "      <td>197501.0</td>\n",
       "      <td>[spørgsmål, centrum-demokraterne, ring, svar, ...</td>\n",
       "      <td>0.534908</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>14.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>8.000</td>\n",
       "      <td>4.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>2021a</td>\n",
       "      <td>F2R5DO</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18651</th>\n",
       "      <td>[-0.08318562, -0.03389016, 0.023226142, -0.141...</td>\n",
       "      <td>15125</td>\n",
       "      <td>Tag Dem ikke af Stemme  At undlade tæt stemme ...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>13422_196801</td>\n",
       "      <td>13422.0</td>\n",
       "      <td>196801.0</td>\n",
       "      <td>[tag, stemme, undlade, tætte, stemme, sin, ove...</td>\n",
       "      <td>0.599753</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8.140</td>\n",
       "      <td>1.163</td>\n",
       "      <td>5.814</td>\n",
       "      <td>2.326</td>\n",
       "      <td>1.163</td>\n",
       "      <td>2021a</td>\n",
       "      <td>DSKT4M</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18652</th>\n",
       "      <td>[-0.077806704, -0.11302953, -0.020301765, -0.0...</td>\n",
       "      <td>15121</td>\n",
       "      <td>Partiets Organisation i København  Sondre Stor...</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>13421_196011</td>\n",
       "      <td>13421.0</td>\n",
       "      <td>196011.0</td>\n",
       "      <td>[partiets, organisation, københavn, sondre, st...</td>\n",
       "      <td>0.503903</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>53.571</td>\n",
       "      <td>0.000</td>\n",
       "      <td>30.952</td>\n",
       "      <td>11.905</td>\n",
       "      <td>0.000</td>\n",
       "      <td>2021a</td>\n",
       "      <td>BTAWTX</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>18653 rows × 183 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                             mean_vector     id  \\\n",
       "0      [0.026116159, -0.007294556, -0.055573158, -0.0...   2465   \n",
       "1      [0.026116159, -0.007294556, -0.055573158, -0.0...   2429   \n",
       "2      [0.0039131385, 0.021633198, -0.0467616, -0.068...   2477   \n",
       "3      [-0.06522093, -0.00727346, -0.059767094, -0.10...   2475   \n",
       "4      [-0.009901553, -0.028200021, -0.04056593, -0.1...   2482   \n",
       "...                                                  ...    ...   \n",
       "18648  [-0.039950237, -0.04162613, 0.034179054, -0.13...   2266   \n",
       "18649  [-0.0009925645, -0.023351314, -0.0008756822, -...  15504   \n",
       "18650  [-0.03026723, -0.095034555, 0.019763567, -0.11...  12487   \n",
       "18651  [-0.08318562, -0.03389016, 0.023226142, -0.141...  15125   \n",
       "18652  [-0.077806704, -0.11302953, -0.020301765, -0.0...  15121   \n",
       "\n",
       "                                                    text cmp_code eu_code  \\\n",
       "0                                    for mere uddannelse      506    None   \n",
       "1                        Vi vil have flere i uddannelse.      506    None   \n",
       "2                         og en bedre ungdomsuddannelse.      506    None   \n",
       "3      Vi ved, at der er brug for at alle får mere ud...     None    None   \n",
       "4      Under uddannelsen kommer en arbejdsløs ind i v...      411    None   \n",
       "...                                                  ...      ...     ...   \n",
       "18648  Med kommunisterne  Fremad - ad nye veje  10 må...     None    None   \n",
       "18649  Nu gælder det Deres hus...  Retten til at eje ...     None    None   \n",
       "18650  Har De et spørgsmål til Centrum-Demokraterne? ...     None    None   \n",
       "18651  Tag Dem ikke af Stemme  At undlade tæt stemme ...     None    None   \n",
       "18652  Partiets Organisation i København  Sondre Stor...     None    None   \n",
       "\n",
       "       manifesto_id    party      date  \\\n",
       "0      13229_200502  13229.0  200502.0   \n",
       "1      13229_200502  13229.0  200502.0   \n",
       "2      13229_200502  13229.0  200502.0   \n",
       "3      13229_200502  13229.0  200502.0   \n",
       "4      13229_200502  13229.0  200502.0   \n",
       "...             ...      ...       ...   \n",
       "18648  13220_197312  13220.0  197312.0   \n",
       "18649  13620_196611  13620.0  196611.0   \n",
       "18650  13330_197501  13330.0  197501.0   \n",
       "18651  13422_196801  13422.0  196801.0   \n",
       "18652  13421_196011  13421.0  196011.0   \n",
       "\n",
       "                                                  tokens  distance_military  \\\n",
       "0                                           [uddannelse]          -0.028382   \n",
       "1                                           [uddannelse]          -0.028382   \n",
       "2                               [god, ungdomsuddannelse]           0.059606   \n",
       "3                                 [brug, få, uddannelse]           0.138609   \n",
       "4                     [uddannelse, arbejdsløs, vikariat]           0.063881   \n",
       "...                                                  ...                ...   \n",
       "18648  [kommunist, fremad, ad, ny, vej, måned, danmar...           0.594765   \n",
       "18649  [gælde, hus, retten, eje, egen, hjem, gode, bå...           0.452430   \n",
       "18650  [spørgsmål, centrum-demokraterne, ring, svar, ...           0.534908   \n",
       "18651  [tag, stemme, undlade, tætte, stemme, sin, ove...           0.599753   \n",
       "18652  [partiets, organisation, københavn, sondre, st...           0.503903   \n",
       "\n",
       "       ...  per608_3  per703_1 per703_2    rile  planeco markeco welfare  \\\n",
       "0      ...       NaN       NaN      NaN -42.152    4.036   0.448  13.901   \n",
       "1      ...       NaN       NaN      NaN -42.152    4.036   0.448  13.901   \n",
       "2      ...       NaN       NaN      NaN -42.152    4.036   0.448  13.901   \n",
       "3      ...       NaN       NaN      NaN -42.152    4.036   0.448  13.901   \n",
       "4      ...       NaN       NaN      NaN -42.152    4.036   0.448  13.901   \n",
       "...    ...       ...       ...      ...     ...      ...     ...     ...   \n",
       "18648  ...       NaN       NaN      NaN -30.200    5.900   1.200   2.300   \n",
       "18649  ...       NaN       NaN      NaN  35.700    0.000  28.600   0.000   \n",
       "18650  ...       NaN       NaN      NaN  14.000    0.000   8.000   4.000   \n",
       "18651  ...       NaN       NaN      NaN   8.140    1.163   5.814   2.326   \n",
       "18652  ...       NaN       NaN      NaN  53.571    0.000  30.952  11.905   \n",
       "\n",
       "      intpeace  datasetversion  id_perm  \n",
       "0       12.556           2021a   GMUFUD  \n",
       "1       12.556           2021a   GMUFUD  \n",
       "2       12.556           2021a   GMUFUD  \n",
       "3       12.556           2021a   GMUFUD  \n",
       "4       12.556           2021a   GMUFUD  \n",
       "...        ...             ...      ...  \n",
       "18648    2.300           2021a   N18DV9  \n",
       "18649    0.000           2021a   WVIU89  \n",
       "18650    0.000           2021a   F2R5DO  \n",
       "18651    1.163           2021a   DSKT4M  \n",
       "18652    0.000           2021a   BTAWTX  \n",
       "\n",
       "[18653 rows x 183 columns]"
      ]
     },
     "execution_count": 110,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#add background info\n",
    "df_mean_reduced_sorted = df_mean_reduced_sorted.merge(dk_main, on = [\"party\",\"date\"])\n",
    "df_mean_reduced_sorted"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>distance_education</th>\n",
       "      <th>rile</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>distance_education</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.571007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>rile</th>\n",
       "      <td>-0.571007</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                    distance_education      rile\n",
       "distance_education            1.000000 -0.571007\n",
       "rile                         -0.571007  1.000000"
      ]
     },
     "execution_count": 127,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#check correlation with \"rile\" variable since we know that education is slightly more related to leftist parties.\n",
    "# if we had more variables they could be added here\n",
    "df_mean_reduced_sorted[[\"distance_education\",\"rile\",\"partyname\"]].groupby(\"partyname\").mean().corr()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "partyname\n",
       "Danish People’s Party          0.345304\n",
       "New Alliance                   0.348666\n",
       "Progress Party                 0.358169\n",
       "Christian People’s Party       0.367657\n",
       "Conservative People’s Party    0.382154\n",
       "Red-Green Unity List           0.382913\n",
       "Liberal Alliance               0.386209\n",
       "The New Right                  0.389481\n",
       "Centre Democrats               0.394546\n",
       "Danish Social-Liberal Party    0.400846\n",
       "Liberals                       0.400958\n",
       "Liberal Centre                 0.401695\n",
       "Social Democratic Party        0.407590\n",
       "Independents’ Party            0.412642\n",
       "Socialist People’s Party       0.413725\n",
       "Justice Party                  0.421174\n",
       "Danish Communist Party         0.423258\n",
       "Alternativ                     0.425480\n",
       "Christian Democrats            0.432785\n",
       "Left Socialist Party           0.441649\n",
       "Common Course                  0.474998\n",
       "Name: distance_education, dtype: float64"
      ]
     },
     "execution_count": 128,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#another way to look at it is by simply comparing the average score across parties\n",
    "df_mean_reduced_sorted.groupby(\"partyname\")[\"distance_education\"].mean().sort_values()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Aligning across time or subgroups"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Since the groups \"Alternativ\" and the \"Conservative People’s Party\" have different mean level education scores it could also be interesting to see whether they are qualitatively different. We therefore use the CADE technique to study differences in subgroups. The method is the same if we wanted to study changes over time."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "metadata": {},
   "outputs": [],
   "source": [
    "parties_chosen = [\"Alternativ\",\"Conservative People’s Party\"]\n",
    "\n",
    "\n",
    "for index, party in enumerate(parties_chosen):\n",
    "    \n",
    "    #subset text\n",
    "    subset_of_texts = df_mean_reduced_sorted[df_mean_reduced_sorted[\"partyname\"]==party]\n",
    "    \n",
    "    #save into both party specific texts and one text with both texts included\n",
    "    try:\n",
    "        corpus =subset_of_texts[\"tokens\"].tolist()        \n",
    "        long_string = list(itertools.chain.from_iterable(corpus))\n",
    "        long_string = \" \".join(long_string)\n",
    "        \n",
    "        #add to compas\n",
    "        if index==0:\n",
    "            connection_t = open(\"for_compass.txt\", \"w\")\n",
    "            connection_t.write(long_string)\n",
    "        else:\n",
    "            connection_t = open(\"for_compass.txt\", \"a\")\n",
    "            connection_t.write(long_string)\n",
    "\n",
    "        #and to self\n",
    "        connection_t = open(\"for_compass_{}.txt\".format(party), \"w\")\n",
    "        connection_t.write(long_string)\n",
    "    except:\n",
    "        print(party)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training the compass from scratch.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/roph/anaconda3/envs/su/lib/python3.8/site-packages/smart_open/smart_open_lib.py:408: UserWarning: This function is deprecated, use smart_open.open instead. See the migration notes for details: https://github.com/RaRe-Technologies/smart_open/blob/master/README.rst#migrating-to-the-new-open-function\n",
      "  warnings.warn(\n"
     ]
    }
   ],
   "source": [
    "#train general model\n",
    "\n",
    "from cade.cade import CADE\n",
    "from gensim.models.word2vec import Word2Vec\n",
    "aligner = CADE(size=30)\n",
    "\n",
    "# train the compass: the text should be the concatenation of the text from the slices\n",
    "aligner.train_compass(\"for_compass.txt\", overwrite=False) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training embeddings: slice for_compass_Alternativ.txt.\n",
      "Initializing embeddings from compass.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/roph/anaconda3/envs/su/lib/python3.8/site-packages/smart_open/smart_open_lib.py:408: UserWarning: This function is deprecated, use smart_open.open instead. See the migration notes for details: https://github.com/RaRe-Technologies/smart_open/blob/master/README.rst#migrating-to-the-new-open-function\n",
      "  warnings.warn(\n",
      "/home/roph/anaconda3/envs/su/lib/python3.8/site-packages/smart_open/smart_open_lib.py:408: UserWarning: This function is deprecated, use smart_open.open instead. See the migration notes for details: https://github.com/RaRe-Technologies/smart_open/blob/master/README.rst#migrating-to-the-new-open-function\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training embeddings: slice for_compass_Conservative People’s Party.txt.\n",
      "Initializing embeddings from compass.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/roph/anaconda3/envs/su/lib/python3.8/site-packages/smart_open/smart_open_lib.py:408: UserWarning: This function is deprecated, use smart_open.open instead. See the migration notes for details: https://github.com/RaRe-Technologies/smart_open/blob/master/README.rst#migrating-to-the-new-open-function\n",
      "  warnings.warn(\n"
     ]
    }
   ],
   "source": [
    "#create model for each subgroup\n",
    "slice_one = aligner.train_slice(\"for_compass_Alternativ.txt\", save=True)\n",
    "slice_two = aligner.train_slice(\"for_compass_Conservative People’s Party.txt\", save=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('periode', 0.9998589754104614),\n",
       " ('befolkning', 0.9998563528060913),\n",
       " ('måde', 0.9998557567596436),\n",
       " ('godte', 0.9998545050621033),\n",
       " ('anerkende', 0.9998341202735901),\n",
       " ('forskning', 0.9998245239257812),\n",
       " ('båd', 0.999823272228241),\n",
       " ('område', 0.9998108744621277),\n",
       " ('samt', 0.9997962713241577),\n",
       " ('eu', 0.9997893571853638),\n",
       " ('udvikle', 0.999788761138916),\n",
       " ('barn', 0.9997857809066772),\n",
       " ('uddannelsesinstitution', 0.9997797012329102),\n",
       " ('fremtid', 0.9997782707214355),\n",
       " ('investering', 0.9997772574424744),\n",
       " ('arbejde', 0.9997748732566833),\n",
       " ('støtte', 0.9997720122337341),\n",
       " ('bæredygtig', 0.9997714757919312),\n",
       " ('betyde', 0.9997700452804565),\n",
       " ('kontrol', 0.9997680187225342),\n",
       " ('bidrage', 0.9997650980949402),\n",
       " ('eksempel', 0.9997636079788208),\n",
       " ('kulturel', 0.9997634887695312),\n",
       " ('bruge', 0.9997628331184387),\n",
       " ('kommune', 0.9997615814208984),\n",
       " ('undersøge', 0.9997613430023193),\n",
       " ('antal', 0.9997572898864746),\n",
       " ('unge', 0.9997550249099731),\n",
       " ('national', 0.9997544288635254),\n",
       " ('civilsamfund', 0.9997526407241821)]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "slice_one.wv.most_similar(\"uddannelse\", topn = 30)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('forskning', 0.9998552799224854),\n",
       " ('periode', 0.9997669458389282),\n",
       " ('måde', 0.9997599124908447),\n",
       " ('godte', 0.9997522830963135),\n",
       " ('skærpe', 0.9997518062591553),\n",
       " ('effektiv', 0.999739408493042),\n",
       " ('ren', 0.999731183052063),\n",
       " ('befolkning', 0.9997246265411377),\n",
       " ('januar', 0.999724268913269),\n",
       " ('beskæftigelse', 0.9997196197509766),\n",
       " ('erhvervsliv', 0.9997169375419617),\n",
       " ('reform', 0.9997110962867737),\n",
       " ('område', 0.9997105002403259),\n",
       " ('år', 0.9997104406356812),\n",
       " ('indføre', 0.9997103810310364),\n",
       " ('båd', 0.999709963798523),\n",
       " ('samt', 0.9997078776359558),\n",
       " ('årlig', 0.9997044801712036),\n",
       " ('sænke', 0.9997029900550842),\n",
       " ('medarbejder', 0.9997026920318604),\n",
       " ('europa', 0.9997021555900574),\n",
       " ('eu', 0.9996998310089111),\n",
       " ('indtægt', 0.9996970295906067),\n",
       " ('belønne', 0.9996925592422485),\n",
       " ('arbejdsmarked', 0.9996896982192993),\n",
       " ('udvikling', 0.9996888041496277),\n",
       " ('forsvar', 0.9996868371963501),\n",
       " ('sætte', 0.9996840953826904),\n",
       " ('styrke', 0.9996808767318726),\n",
       " ('blive', 0.9996793270111084)]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "slice_two.wv.most_similar(\"uddannelse\", topn = 30)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This is of course merely a very simple illustration but it does suggest that e.g. words such as \"incentivize\" (\"belønne\"), \"labor market\" (\"arbejdsmarked\") and \"revenue\" (\"indtægt\") are more important for the Conservative People’s Party, when discussing education compared to the more leftist party \"Alternativ\", where these words are absent."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "su",
   "language": "python",
   "name": "su"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
